正規表示式5
2013-08-26 12:24
my $content = "I like perl. \n I am a perl monger. \n";
if ($content =~ /(like.*monger)/s) {
print "$1\n";
}
這裡的$1就是表示第一個括號括住的的比對結果。所以Perl會送出這樣的結果:
[hcchien@Apple]% perl ch3.pl
like perl.
I am a perl monger
當然,預設的比對變數也是可以一次擷取多個比對結果,就像下面的例子:
my $content = "I like perl. \n I am a perl monger. \n";
if ($content =~ /(perl)\s(monger)/s) { # $1 = "perl", $2 = "monger"
print "$1\n"; # 印出 perl
}
不過我們如果再把這個小程式改寫成這樣呢?
my $content = "I like perl. \n I am a perl monger. \n";
if ($content =~ /((perl)\s(monger))/s) {
print "$1\n$2\n$3\n";
}
結果非常有趣:
[hcchien@Apple]% perl ch3.pl
perl monger
perl
monger
看出來了嗎?我們用括號拿到三個比對變數,而Perl分配變數的方式則是根據左括號的位置來進行。因此最左邊的括號是整個比對結果,也就是"perl monger",接下來是"perl",最後才是"monger"。相當有趣,也相當實用。