修改Perl脚本,我得到这个:如何使用不同的分隔符(/,|)的正则表达式
$var =~ s,/$,,;
这似乎是一个正则表达式,但我期待发现“ /“(或”|“)而不是”,“作为分隔符。
所以问题是: 什么时候和为什么应该使用正则表达式模式“/”或“|”要么 ”,”?
修改Perl脚本,我得到这个:如何使用不同的分隔符(/,|)的正则表达式
$var =~ s,/$,,;
这似乎是一个正则表达式,但我期待发现“ /“(或”|“)而不是”,“作为分隔符。
所以问题是: 什么时候和为什么应该使用正则表达式模式“/”或“|”要么 ”,”?
在Perl,在替换操作,以及许多其他运营商,您可以替换分隔符为几乎任何标点符号,如
s#/$##
s=/$==
s!/$!!
使用哪一个的时候是一个问题你当时需要什么。最好你选择一个不与你的正则表达式中的字符冲突的分隔符,以及一个可读的分隔符。
在你的情况下,使用了与/
不同的分隔符,因为有人想在正则表达式中包含一个斜杠,以删除一个结尾的斜杠。使用默认的分隔符,这本来是:
s/\/$//
这是不容易阅读。
就像我上面提到的,你可以用大量运算符和函数做到这一点:
m#...#
qw/.../
qw#...#
tr;...;;
qq?...?
在Perl中,默认的正则表达式的分隔符是/
。
然而,其它字符可能被用来代替/
。通常,当正则表达式本身包含/
时,您可以使用备用分隔符。使用替代分隔符避免了分隔符的过度转义:
s/foo\/bar\//baz/;
与
s|foo/bar/|baz|;
这是用于匹配包含路径名称是特别有用的 “/”, 到避免LTS(倾斜牙签综合症)。
只需按一下正则表达式的任何教程,它几乎总是第一课... [这里](HTTP ://regexone.com)你有一个互动的资源 –
我不认为你了解这个问题。 –
见http://stackoverflow.com/questions/20733602/differences-between-m-pattern-and-pattern-in-perl/20735252#20735252 – ikegami