perl正则表达式转义字符

时间:2010-12-29 00:08:44

标签: regex perl

我听说perl是正在使用正则表达式的好语言,但我对需要转义的字符感到有点困惑

我在http://regexlib.com/RETester.aspx上测试了代码,得到了我想要的结果

//home/dev/abc/code/hello/world.cpp#1
//home/dev/((.*?)/[^/]+).*#

Match   $1  $2
//home/dev/abc/code/hello/world.cpp#    abc/code    abc

但是,我不太确定如何将其转换为perl代码

我试过了,

\/\/home\/dev\/\(\(\.\*\?\)\/\[\^\/\]\+\)\.\*\#

\/\/home\/dev\/((.*?)\/[^\/]+).*\#

并且都失败了

难道你不认为逃避使得正则表达式难以理解吗?我用错了什么?

2 个答案:

答案 0 :(得分:8)

如果你正在使用perl,你不必使用/作为正则表达式分隔符,如果你在分隔符之前用匹配运算符的“m”,或者替换运算符的“s”(例如你)可以使用#!甚至任何平衡的括号/括号:s[this][that]),然后您就不必转义/。您还可以使用自动转义任何元字符的quotemeta函数或\Q ... \E正则表达式escape sequences

答案 1 :(得分:5)

您可以选择使用!代替/来包围正则表达式,这样您就不必转义/

m!//home/dev/((.*?)/[^/]+).*#!

应该有效。这是它的实际应用:http://ideone.com/TDrBG