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

时间:2011-05-20 18:35:18

标签: regex perl escaping

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

6 个答案:

答案 0 :(得分:76)

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

答案 1 :(得分:34)

以下是一些选项:

  • 在Perl中,您可以选择备用分隔符。你不仅限于m//。您可以选择其他人,例如m{}。然后逃避是没有必要的。事实上,Damian Conway在“Perl最佳实践”中声称m{}是唯一应该使用的替代分隔符,Perl :: Critic(在CPAN上)强化了这一点。虽然您可以使用各种备用分隔符字符,但//{}似乎是最明细的解密。但是,如果这些选择中的任何一个导致过多的转义,请选择哪一个最适合于易读性。常见示例包括m(...)m[...]m!...!

  • 如果您不能或不想使用备用分隔符,则可以使用反斜杠转义正斜杠:m/\/[^/]+$/(使用可能成为m{/[^/]+$}的备用分隔符,可能会更清楚地阅读)。使用反斜杠转义斜杠通常足以获得名称和维基百科页面:Leaning Toothpick Syndrome。在只有一个实例的正则表达式中,转义斜杠可能不会升级到被认为是易读性的障碍,但如果它开始失控,并且如果你的语言允许像Perl那样的备用分隔符,那么是首选的解决方案。

答案 2 :(得分:9)

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

答案 3 :(得分:6)

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

答案 4 :(得分:0)

如果您使用的是C#,则无需对其进行转义。

答案 5 :(得分:0)

对于Java,您不需要。

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

如果将\放在/前面。 IDE会告诉您“ ReGex中的冗余字符转义符“ \ /”“