在 .NETRegex
模式中,哪些特殊字符需要转义才能按字面意思使用?
问问题
21090 次
4 回答
47
我不知道完整的字符集 - 但无论如何我不会依赖这些知识,也不会将其放入代码中。相反,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);
}
于 2012-10-18T20:29:29.580 回答
30
以下是需要转义才能将它们用作普通文字的字符列表:
- 左方括号
[
- 反斜杠
\
- 插入符号
^
- 美元符号
$
- 句号或点
.
- 竖条或竖管符号
|
- 问号
?
- 星号或星号
*
- 加号
+
- 左圆括号
(
和右圆括号)
- 打开大括号
{
- 英镑/哈希符号
#
这些特殊字符通常称为“元字符”。
但是,我同意 JonRegex.Escape
在代码中使用而不是硬编码这些字符。
于 2013-02-09T11:26:10.537 回答
14
请参阅此处的 MSDN 文档:http: //msdn.microsoft.com/en-us/library/az24scfc.aspx#character_escapes
完整列表的问题在于它取决于上下文。例如.
,必须转义,除非它被括在括号中,如[.]
. ]
技术上不需要转义,除非它前面有[
. -
没有特殊含义,除非它在括号内,如[A-Z]
. =
除非前面有?
as in ,否则没有特殊含义(?=)
。
于 2012-10-18T20:29:27.600 回答
14
我认为您可以将字符列表作为
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#$()*+.?[\^{|
于 2012-10-18T20:36:46.457 回答