为什么在正则表达式中使用不同的分隔符(/、|)?

问题描述 投票:0回答:2

我在 Perl 脚本中找到了这段代码:

$var =~ s,/$,,;

这似乎是一个正则表达式模式,但我希望找到“/”(或“|”)而不是“,”作为分隔符。

何时以及为何应使用“/”或“|”或者正则表达式模式中的“,”?

regex perl replace
2个回答
10
投票

在 Perl 中,在替换运算符以及许多其他运算符中,您可以将分隔符替换为几乎任何标点符号,例如

s#/$##
s=/$==
s!/$!!

什么时候使用哪一个取决于你当时的需要。最好选择一个与正则表达式中的字符不冲突且可读的分隔符。

在您的情况下,使用了与

/
不同的分隔符,因为有人想在正则表达式中包含斜杠,以删除尾部斜杠。使用默认分隔符,它将是:

s/\/$//

这不太容易阅读。

就像我上面提到的,您可以使用很多运算符和函数来做到这一点:

m#...#
qw/.../
qw#...#
tr;...;;
qq?...?

3
投票

在 Perl 中,默认的正则表达式分隔符是

/

但是,可以使用其他字符来代替

/
。通常,当正则表达式本身包含
/
时,您将使用备用分隔符。使用备用分隔符可以避免分隔符的过度转义:

s/foo\/bar\//baz/;

s|foo/bar/|baz|;

perlpdoc perlop

这对于匹配包含“/”的路径名特别有用, 以避免 LTS(倾斜牙签综合症)。

© www.soinside.com 2019 - 2024. All rights reserved.