正規表示式4
2013-08-26 12:23
可是我要怎麼確定不會寫成PERL呢?其實你可以考慮忽略大小寫的比對方式,所以你只要這樣表示:
$content =~ /perl/i;
其中的修飾字元i就是告訴Perl,你希望這次的比對可以忽略大小寫,也就是不管大小寫都算是比對成功。所以你有可能比對到Perl,perl,PERL。當然也可能有pErL這種奇怪的字串,不過有時候你會相信沒人會寫出這樣的東西在自己的文章裡。
Perl在進行比對的修飾字元,除了/i之外,我們還有/s可用。我們剛剛稍微提到了可以使用萬用字元點號(.)來進行比對,可是使用萬用字元卻有一個問題,也就是如果我們拿到的字串不在同一行內,萬用字串是沒辦法自動幫我們跨行比對,就像這樣:
my $content = "I like perl. \n I am a perl monger. \n";
if ($content =~ /like.*monger/) {
print "*$1*\n";
}
我們想要找到like到monger中間的所有字元,可是因為中間多了換行符號(\n),所以Perl並不會找到我們真正需要的東西。這時候我們就可以動用/s來要求Perl進行跨行的比對。因此我們只要改寫原來的樣式為:
$content =~ /like.*monger/s
那麼就可以成功的進行比對了。可是如果有人還是喜歡用Perl Monger或是PERL MONGER來表達呢?我們當然還是可以同時利用忽略大小寫的修飾字元,因此我們再度重寫整個比對樣式:
$content =~ /like.*monger/is