Regex转义符为或

本文关键字:转义 Regex | 更新日期: 2023-09-27 18:21:32

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

许多在线引用使用单个反斜杠,在线regex测试人员使用单个反斜线,但在实践中,我经常不得不使用双反斜杠来转义字符。

例如:

"SomeString'."

在一个在线regex测试程序中工作,匹配后面跟一个点的"SomeString"。

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

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

Regex转义符为或

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''