正则表达式用\或\\逃脱?

时间:2014-09-11 09:14:21

标签: c# regex

当需要使用双反斜杠或单反斜杠来转义字符时,有人可以在使用正则表达式时向我解释吗?

许多在线参考使用单反斜杠和在线正则表达式测试人员使用单反斜杠,但在实践中我经常需要使用双反斜杠来逃避角色。

例如:

"SomeString\."

在在线正则表达式测试工具中使用并匹配" SomeString"接着是一个点。

然而在实践中我必须使用双重转义:

if (Regex.IsMatch(myString, "SomeString\\."))

5 个答案:

答案 0 :(得分:10)

C#没有特殊的语法来构造正则表达式,比如Perl,Ruby或JavaScript。它改为使用带字符串的构造函数。但是,字符串有自己的转义机制,因为您希望能够在字符串中放置引号。因此,有两个级别的逃避。

因此,在正则表达式中,w表示字母“w”,而\w表示单词字符。但是,如果你创建一个字符串"\w",你就会转义字符“w”,这没有任何意义,因为字符“w”不是引号或反斜杠,所以"w" == "\w"。然后,只包含“w”的字符串将传递给regexp构造函数,最后匹配字母“w”而不是任何单词字符。因此,要将反斜杠传递给regexp,您需要在字符串文字(\\w)中放入两个反斜杠:一个在解释字符串文字时将被删除,一个将由正则表达式使用。

直接使用正则表达式时(例如在大多数在线正则表达式测试器上,或者在使用逐字字符串@"..."时),您不必担心字符串文字的解释,并且您只需编写一个反斜杠(除非你想匹配反斜杠本身,但是你正在使用正则表达式的反斜杠,而不是字符串)。

答案 1 :(得分:4)

\也是c#中字符串文字的转义字符,所以第一个\是转义传递给方法的第二个\,第二个是转义的。在正则表达式。

使用:

if (Regex.IsMatch(myString, @"SomeString\."))

如果你想避免双重逃避。

答案 2 :(得分:2)

我使用逐字符号@(逐字字符串),您不需要再次使用反斜杠。

if (Regex.IsMatch(myString, @"SomeString\."))

答案 3 :(得分:0)

旧帖子,但Regex.Escape可能有用

答案 4 :(得分:0)

在JavaScript中,您必须使用双转义符:\

let m = "My numer is [56]".match("\\[(.*)\\]"); 
alert(m[1]);//outputs 56

在C#中,单个\