Regex 带感叹号的Perl正则表达式
如何定义/解释此Perl正则表达式:Regex 带感叹号的Perl正则表达式,regex,perl,Regex,Perl,如何定义/解释此Perl正则表达式: $para =~ s!//!/!g; 我知道s表示搜索,g表示全局(搜索),但不知道感叹号是怎么回事和额外的斜杠/适合(因为我认为模式看起来更像s/abc/def/g)。Perl的正则表达式操作符s,m和tr(虽然它不是真正的正则表达式操作符)允许您使用任何符号作为分隔符 这意味着你不必使用你可以使用的/,就像你的问题 # the regex s!//!/!g 表示搜索所有'/'实例并将其替换为'/' 你可以写和我一样的东西 s/\/\//\/g 或
$para =~ s!//!/!g;
我知道
s
表示搜索,g
表示全局(搜索),但不知道感叹号是怎么回事
和额外的斜杠/
适合(因为我认为模式看起来更像s/abc/def/g
)。Perl的正则表达式操作符s
,m
和tr
(虽然它不是真正的正则表达式操作符)允许您使用任何符号作为分隔符
这意味着你不必使用你可以使用的/
,就像你的问题代码>
# the regex
s!//!/!g
表示搜索所有'/'
实例并将其替换为'/'
你可以写和我一样的东西
s/\/\//\/g
或
或
如果你真的想要,但正如你所看到的第一个,所有的反斜杠,是很难理解和更麻烦
更多信息可以在中找到,替换正则表达式(和其他正则表达式操作符,如m//
)可以使用任何标点字符作为分隔符。这就省去了在正则表达式中转义元字符的麻烦
如果要替换斜杠,则编写以下内容会很尴尬:
s/\/\//\//g;
这就是你能写作的原因
s!//!/!g;
…相反。看
不,s//
是替代m//
是搜索,尽管我确实相信预期的助记符是“匹配”。感叹号是分隔符;perl允许您在合理的范围内选择所需的任何字符。该语句相当于(更加丑陋的)s/\/\/\/\///g
——也就是说,它将//
替换为/,而不仅仅限于那些合理的字符。您可以使用任何[^\s\w]
字符作为分隔符。如果它是四种ASCII开括号类型之一,则相应的闭式版本为mate;否则就是同一个角色完成的。有很多不合理但合法的选择。没有人会感谢你选择了索利多金币,也不会感谢你选择了分号。
s/\/\//\//g;
s!//!/!g;