2012-10-18 86 views

回答

34

我不知道完整的字符集 - 但我不会依靠知识,无论如何,我不会把它放到代码。相反,我会用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); 
} 
+0

逃生$性格太?:'VAR针= @ “这里$%#任何文本更多的文本”;' – Kiquenet

+0

@Kiquenet:'Regex.Escape'已经做到这一点。 –

+2

@JonSkeet:谢谢你指出Regex.Escape,我正要重新发明一个方形轮,直到我看到你的答案。 – mcdon

8

请参阅MSDN文档在这里:http://msdn.microsoft.com/en-us/library/az24scfc.aspx#character_escapes

一个完整列表的问题是,它依赖于上下文。例如.必须转义,除非它包含在括号中,如[.]]技术上不需要转义,除非它前面有[-没有特殊含义,除非它在括号内,如[A-Z]=没有特别的含义,除非在(?=)之前有?

11

我认为你可以得到字符的列表,

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#$()*+.?[\^{| 
17

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

  1. 开放方括号[
  2. 反斜杠\
  3. 插入符^
  4. 美元符号$
  5. 时期或点.
  6. 竖线或管道符号|
  7. 问号?
  8. 星号或明星*
  9. 加号+
  10. 首轮支架(,截止轮托架)
  11. 左大括号{
  12. 英镑/井号#

这些特殊字符通常被称为 “元字符” 。

但是,我与Jon同意使用Regex.Escape代替代码硬编码这些字符。

+5

我认为你需要在列表中包括'{'。 – H2ONaCl

+0

并包括''' –

相关问题