修改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