当需要使用双反斜杠或单反斜杠来转义字符时,有人可以在使用正则表达式时向我解释吗?
很多在线参考使用单反斜杠和在线正则表达式测试人员使用单反斜杠,但在实践中我经常需要使用双反斜杠来逃避角色 .
例如:
"SomeString\."
适用于在线正则表达式测试程序,并匹配“SomeString”后跟一个点 .
但是在实践中我必须使用双重转义:
if (Regex.IsMatch(myString, "SomeString\\."))
C#没有用于构造正则表达式的特殊语法,如Perl,Ruby或JavaScript . 它改为使用带字符串的构造函数 . 但是,字符串有自己的转义机制,因为您希望能够在字符串中放置引号 . 因此,有两个级别的转义 .
因此,在正则表达式中, w 表示字母"w",而 \w 表示单词字符 . 但是,如果你创建一个字符串 "\w" ,你正在转义字符"w",这没有任何意义,因为字符"w"不是引号或反斜杠,所以 "w" == "\w" . 然后这个只包含"w"的字符串被传递给regexp构造函数,最终匹配字母"w"而不是任何单词字符 . 因此,要将反斜杠传递给regexp,您需要在字符串文字中放入两个反斜杠( \\w ):当解释字符串文字时将删除一个反斜杠,正则表达式将使用一个反斜杠 .
w
\w
"\w"
"w" == "\w"
\\w
在直接使用正则表达式时(例如在大多数在线正则表达式测试器上,或者在使用逐字字符串 @"..." 时),您不必为正则表达式提供反斜杠,而不是字符串 .
@"..."
\也是c#中字符串文字的转义字符,所以第一个\是转义传递给方法的第二个\,第二个是转义的 . 在正则表达式 .
使用:
if (Regex.IsMatch(myString, @"SomeString\."))
如果你想避免双重逃逸 .
我使用逐字符号 @ (逐字字符串),您不需要再次使用反斜杠 .
@
旧帖但Regex.Escape可能有用
4 回答
C#没有用于构造正则表达式的特殊语法,如Perl,Ruby或JavaScript . 它改为使用带字符串的构造函数 . 但是,字符串有自己的转义机制,因为您希望能够在字符串中放置引号 . 因此,有两个级别的转义 .
因此,在正则表达式中,
w
表示字母"w",而\w
表示单词字符 . 但是,如果你创建一个字符串"\w"
,你正在转义字符"w",这没有任何意义,因为字符"w"不是引号或反斜杠,所以"w" == "\w"
. 然后这个只包含"w"的字符串被传递给regexp构造函数,最终匹配字母"w"而不是任何单词字符 . 因此,要将反斜杠传递给regexp,您需要在字符串文字中放入两个反斜杠(\\w
):当解释字符串文字时将删除一个反斜杠,正则表达式将使用一个反斜杠 .在直接使用正则表达式时(例如在大多数在线正则表达式测试器上,或者在使用逐字字符串
@"..."
时),您不必为正则表达式提供反斜杠,而不是字符串 .\也是c#中字符串文字的转义字符,所以第一个\是转义传递给方法的第二个\,第二个是转义的 . 在正则表达式 .
使用:
如果你想避免双重逃逸 .
我使用逐字符号
@
(逐字字符串),您不需要再次使用反斜杠 .旧帖但Regex.Escape可能有用