如何定义/解释此Perl正则表达式:
$para =~ s!//!/!g;
我知道s
表示搜索,g
表示全局(搜索),但不确定感叹号!
和额外斜杠/
如何适合(如我认为该模式看起来更像s/abc/def/g
)。
答案 0 :(得分:10)
Perl的正则表达式运算符s
,m
和tr
(认为它不是真正的正则表达式运算符)允许您使用任何符号作为分隔符。
这意味着您不必使用/
可以使用!
# the regex
s!//!/!g
表示使用'//'
'/'
的所有实例
你可以写与
相同的东西s/\/\//\/g
或
s#//#/#g
或
s{//}{/}g
如果你真的想要,但你可以看到第一个带有所有反斜杠,很难理解,而且更加麻烦。
中找到更多信息答案 1 :(得分:4)
替换正则表达式(以及其他正则表达式运算符,如m///
)可以将任何标点字符作为分隔符。这样可以省去在正则表达式中转义元字符的麻烦。
如果你想替换斜杠,写下来会很尴尬:
s/\/\//\//g;
这就是为什么你可以写
s!//!/!g;
...来代替。见http://perldoc.perl.org/perlop.html#Regexp-Quote-Like-Operators
不,s///
是替代品。 m///
是搜索,但我确实认为预期的助记符是“匹配”。
答案 2 :(得分:1)
感叹号是分隔符; perl让你在合理的范围内选择你想要的任何角色。该陈述等同于(更加丑陋)s/\/\//\//g
- 也就是说,它将//
替换为/
。