Regex转义符为或
本文关键字:转义 Regex | 更新日期: 2023-09-27 18:21:32
有人能向我解释一下当使用正则表达式时,需要使用双反斜杠或单反斜杠来转义字符吗?
许多在线引用使用单个反斜杠,在线regex测试人员使用单个反斜线,但在实践中,我经常不得不使用双反斜杠来转义字符。
例如:
"SomeString'."
在一个在线regex测试程序中工作,匹配后面跟一个点的"SomeString"。
然而,在实践中,我必须使用双重转义:
if (Regex.IsMatch(myString, "SomeString''."))
C#没有像Perl、Ruby或JavaScript那样的特殊语法来构造正则表达式。相反,它使用了一个接受字符串的构造函数。但是,字符串有自己的转义机制,因为您希望能够在字符串中加引号。因此,有两个层次的逃避。
因此,在正则表达式中,w
表示字母"w",而'w
表示单词字符。但是,如果您生成一个字符串"'w"
,那么您就是在转义字符"w",这是没有意义的,因为字符"w"不是引号或反斜杠,所以"w" == "'w"
。然后,这个只包含"w"的字符串被传递给regexp构造函数,最终匹配的是字母"w",而不是任何单词字符。因此,要将反斜杠传递给regexp,您需要在字符串文字(''w
)中放入两个反斜杠:一个将在解释字符串文字时删除,另一个将由正则表达式使用。
当直接使用正则表达式时(例如在大多数在线regexp测试程序上,或使用逐字逐句的字符串@"..."
),您不必担心字符串文字的解释,并且您总是只写一个反斜杠(除非您想匹配反斜杠本身,但随后您为regexp而不是字符串反斜杠)。
''也是c#中字符串文字的转义符,因此第一个''是转义传递给方法的第二个'',第二个是转义。在正则表达式中。
用途:
if (Regex.IsMatch(myString, @"SomeString'."))
如果您想避免双重转义。
如果使用逐字符号@
(逐字字符串),则不需要再次转义反斜杠。
if (Regex.IsMatch(myString, @"SomeString'."))
旧的帖子,但Regex.Eescape可能是有用的
在JavaScript中,您必须使用双转义符:''
let m = "My numer is [56]".match("''[(.*)'']");
alert(m[1]);//outputs 56
在C#single''