2014-01-24 45 views
0

修改Perl脚本,我得到这个:如何使用不同的分隔符(/,|)的正则表达式

$var =~ s,/$,,; 

这似乎是一个正则表达式,但我期待发现“ /“(或”|“)而不是”,“作为分隔符。

所以问题是: 什么时候和为什么应该使用正则表达式模式“/”或“|”要么 ”,”?

+0

只需按一下正则表达式的任何教程,它几乎总是第一课... [这里](HTTP ://regexone.com)你有一个互动的资源 –

+0

我不认为你了解这个问题。 –

+1

见http://stackoverflow.com/questions/20733602/differences-between-m-pattern-and-pattern-in-perl/20735252#20735252 – ikegami

回答

5

在Perl,在替换操作,以及许多其他运营商,您可以替换分隔符为几乎任何标点符号,如

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

使用哪一个的时候是一个问题你当时需要什么。最好你选择一个不与你的正则表达式中的字符冲突的分隔符,以及一个可读的分隔符。

在你的情况下,使用了与/不同的分隔符,因为有人想在正则表达式中包含一个斜杠,以删除一个结尾的斜杠。使用默认的分隔符,这本来是:

s/\/$// 

这是不容易阅读。

就像我上面提到的,你可以用大量运算符和函数做到这一点:

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

不仅仅是标点字符:字母工作太:'“富” = 382 4 ofoor'→'oo'。然而,没有理由永远不要这样做(混淆不谈)。 – amon

+0

@amon确实。我似乎回想起曾经使用太空的人,但无法想起如何。但也许不是推荐的东西。 – TLP

2

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

然而,其它字符可能被用来代替/。通常,当正则表达式本身包含/时,您可以使用备用分隔符。使用替代分隔符避免了分隔符的过度转义:

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

s|foo/bar/|baz|; 

perlpdoc perlop

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

相关问题