转义正则表达式中的正斜杠

我的问题很简单,是关于正则表达式转义的。在正则表达式中必须转义正斜杠 /吗?你打算怎么做?

241151 次浏览

什么语境/语言?有些语言使用 /作为模式分隔符,所以是的,您需要转义它,这取决于使用哪种语言/上下文。你可以在它前面放一个反斜杠来转义它: \/对于某些语言(比如 PHP) ,你可以使用其他字符作为分隔符,因此你不需要转义它。但是 AFAIK 在所有语言中,唯一特殊的意义就是 /可能是指定的模式分隔符。

如果分隔符是/,则需要转义。

使用反斜杠 \或选择一个不同的分隔符,即 m#.\d#而不是 /.\d/ ”在 Perl 中,如果在/正则表达式分隔符前面加上字母 m (表示匹配) ,则可以将其更改为几乎任何其他特殊字符;

下面是一些选择:

  • 在 Perl 中,可以选择备用分隔符。你没有被限制在 m//。您可以选择另一个,例如 m{}。那就没必要逃跑了。事实上,Damian Conway 在“ Perl Best Practices”中断言,m{}是唯一应该使用的替代分隔符,Perl: : Critic (on CPAN)强化了这一点。虽然您可以使用各种交替分隔符字符,//{}似乎是最清楚的解密后。然而,如果这两种选择中的任何一种导致过多的逃避,那么就选择最容易辨认的一种。常见的例子有 m(...)m[...]m!...!

  • 如果您不能或不愿意使用替代分隔符,可以使用反斜杠转义正斜杠: 例如 m/\/[^/]+$/(使用可以成为 m{/[^/]+$}的替代分隔符,这样可以读得更清楚)。使用反斜杠转义斜杠是很常见的,足以赢得一个名字和一个维基百科页面: 倾斜牙签综合症。在只有一个实例的正则表达式中,转义斜杠可能不会被认为是对易读性的障碍,但是如果它开始失控,并且如果您的语言像 Perl 那样允许替换分隔符,那么这将是首选的解决方案。

如果使用 C # ,则不需要转义它。

对于爪哇,你不需要。

eg: "^(.*)/\\*LOG:(\\d+)\\*/(.*)$" ==> ^(.*)/\*LOG:(\d+)\*/(.*)$

如果你放在/前面. IDE 会告诉你“ ReGex 中的冗余字符逃逸”/“”