有人可以解释一下在使用正则表达式时何时需要使用双反斜线或单反斜线来转义字符吗?
很多在线参考都使用单个反斜杠,而在线正则表达式测试工具也使用单个反斜杠,但实际上我经常需要使用双反斜杠来转义字符。
例如:
"SomeString\."
在一个在线的正则表达式测试器中,匹配以 "SomeString" 开头并跟着一个点号的内容。
然而在实际使用中,我不得不使用双重转义:
if (Regex.IsMatch(myString, "SomeString\\."))
有人可以解释一下在使用正则表达式时何时需要使用双反斜线或单反斜线来转义字符吗?
很多在线参考都使用单个反斜杠,而在线正则表达式测试工具也使用单个反斜杠,但实际上我经常需要使用双反斜杠来转义字符。
例如:
"SomeString\."
在一个在线的正则表达式测试器中,匹配以 "SomeString" 开头并跟着一个点号的内容。
然而在实际使用中,我不得不使用双重转义:
if (Regex.IsMatch(myString, "SomeString\\."))
C#没有像Perl、Ruby或JavaScript那样用于构建正则表达式的特殊语法。相反,它使用一个接受字符串参数的构造函数。然而,字符串有它们自己的转义机制,因为你希望能够将引号放在字符串中。因此,有两个级别的转义。
所以,在正则表达式中,w
表示字母"w",而\w
表示单词字符。但是,如果你创建一个字符串"\w"
,你正在转义字符"w",这是没有意义的,因为字符"w"既不是引号也不是反斜杠,所以"w" == "\w"
。然后,这个只包含"w"的字符串被传递给regexp构造函数,你最终会匹配字母"w"而不是任何单词字符。因此,为了将反斜杠传递给regexp,你需要在字符串文字中放入两个反斜杠(\\w
):一个将在解释字符串文字时被移除,一个将被正则表达式使用。
当直接使用正则表达式(如大多数在线正则表达式测试器或使用原始字符串@"..."
时),你无需担心字符串文字的解释,并且总是只写一个反斜杠(除非你想匹配反斜杠本身,但那时你是为regexp转义反斜杠,而不是为字符串转义)。
\ 在C#中也是字符串文字的转义字符,因此第一个 \ 转义了传递给方法的第二个 \,而第二个 \ 转义了正则表达式中的 .。
用法:
if (Regex.IsMatch(myString, @"SomeString\."))
@
(verbatim字符串),则无需再次转义反斜杠。if (Regex.IsMatch(myString, @"SomeString\."))
"
作为分隔符,则需要再次转义反斜杠。此外,请参阅Ben或Amadan的答案以获取更多信息。 - Avinash Raj旧帖但Regex.Escape可能有用
Regex.Escape()
,则不会像您期望的那样得到“\b”,因为“\b”已经是原始字符串中的特殊字符,并且永远不会在编译后的代码中被视为“\”+“b”。 - Nyergudslet m = "My numer is [56]".match("\\[(.*)\\]");
alert(m[1]);//outputs 56
在C#中单个反斜杠 \