2014-01-24 58 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(傾斜牙籤綜合症)。