在 .NET 的
Regex
模式中,哪些特殊字符需要转义才能被当作字面量使用?我不知道完整的字符集 - 但无论如何我都不会依赖这些知识,并且我也不会将其编写到代码中。相反,当我需要一些我不确定的文字时,我会使用Regex.Escape
:
// Don't actually do this to check containment... it's just a little example.
public bool RegexContains(string haystack, string needle)
{
Regex regex = new Regex("^.*" + Regex.Escape(needle) + ".*$");
return regex.IsMatch(haystack);
}
以下是需要转义以将它们用作普通字面量的字符列表:
[
\
^
$
.
|
?
*
+
(
和右圆括号)
{
#
这些特殊字符通常称为“元字符”。
但是,我同意Jon的观点,应该在代码中使用 Regex.Escape
代替硬编码这些字符。
{
符号。 - H2ONaCl"
- Arman Spr]
不在列表中,但如果作为文字使用并在[
之前,则需要转义。 - Tawab Wakil请查看MSDN文档:http://msdn.microsoft.com/en-us/library/az24scfc.aspx#character_escapes
完整列表的问题在于它取决于上下文。例如,.
必须进行转义,除非它被括号包围,例如[.]
。]
从技术上讲不需要进行转义,除非它前面有[
。-
没有特殊意义,除非它在括号内,如[A-Z]
。=
没有特殊含义,除非它前面有?
,如(?=)
。
List<char> chars = Enumerable.Range(0,65535)
.Where(i=>((char)i).ToString()!=Regex.Escape(((char)i).ToString()))
.Select(i=>(char)i)
.ToList();
--
\t\n\f\r#$()*+.?[\^{|
haystack.IndexOf(needle) >= 0
。 - Jacob Krall