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

Zer*_*obu 95 regex perl escaping

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

Cra*_*ent 81

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


Dav*_*idO 35

以下是一些选项:

  • 在Perl中,您可以选择备用分隔符.你并不局限于此m//.你可以选择另一个,比如m{}.然后逃避是没有必要的.由于事实上,达米安康威在"Perl的最佳实践"断言m{}是应该是所使用的唯一其它分隔,并且这通过的Perl ::评论家(上CPAN)加强.虽然你可以逃脱使用各种其它分隔符,//并且{}似乎是最清晰的破译以后.但是,如果这些选择中的任何一个导致过多的转义,请选择哪一个最适合于易读性.常见的例子是m(...),m[...]m!...!.

  • 如果您不能或不想使用备用分隔符,则可以使用反斜杠转义正斜杠: m/\/[^/]+$/例如(使用可能变为m{/[^/]+$}更清晰的备用分隔符).逃离用反斜杠反斜杠是足够共同赢得了一个名字和维基百科页面:倾斜牙签综合症.在正则表达式那里只是一个实例,逃避斜线可能不会上升到被认为是妨碍易读性水平,但如果它开始失控,如果你的语言允许备用分隔符为perl做,那会是首选的解决方案.

  • @CMCDragonkai`perl -pi -e“ s {chdir。*} {chdir $ ROBOT_PATH} g” startup_scripts / supervisord.conf` ...但这可能更好:`perl -pi -e's / chdir。* / chdir $ ENV {ROBOT_PATH} / g'startup_scripts / supervisord.conf`,因为它避免了shell插值。 (2认同)

小智 9

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


小智 6

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