在.NET Regex
模式中,需要转义哪些特殊字符才能按字面意思使用?
答案 0 :(得分:39)
我不知道完整的字符集 - 但我不会依赖这些知识,我也不会把它放到代码中。相反,每当我想要一些我不确定的文字时,我会使用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);
}
答案 1 :(得分:23)
以下是需要转义以将其用作普通文字的字符列表:
[
\
^
$
.
|
?
*
+
(
和结束圆括号)
{
#
这些特殊字符通常称为“元字符”。
但是,我同意Jon使用Regex.Escape
而不是在代码中对这些字符进行硬编码。
答案 2 :(得分:12)
请参阅此处的MSDN文档:http://msdn.microsoft.com/en-us/library/az24scfc.aspx#character_escapes
完整列表的问题在于它取决于上下文。例如,.
必须进行转义,除非它括在括号中,如[.]
中所示。 ]
技术上不需要转义,除非它前面有[
。 -
没有特殊含义,除非它在括号内,如[A-Z]
。 =
没有特殊含义,除非在?
之前有(?=)
。
答案 3 :(得分:12)
我认为你可以将字符列表作为
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#$()*+.?[\^{|