我的问题很简单,它是关于正则表达式转义的。你是否必须在正则表达式中转义正斜杠/
?你会怎么做呢?
答案 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中的冗余字符转义符“ \ /”“