在.NET Regex中需要转义哪些字符?

时间:2012-10-18 20:26:55

标签: .net regex escaping

在.NET Regex模式中,需要转义哪些特殊字符才能按字面意思使用?

4 个答案:

答案 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)

以下是需要转义以将其用作普通文字的字符列表:

  1. 打开方括号[
  2. 反斜杠\
  3. Caret ^
  4. 美元符号$
  5. 句号或点.
  6. 竖条或竖线符号|
  7. 问号?
  8. 星号或星号*
  9. 加号+
  10. 打开圆括号(和结束圆括号)
  11. 打开花括号{
  12. 磅/哈希标志#
  13. 这些特殊字符通常称为“元字符”。

    但是,我同意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#$()*+.?[\^{|