正規表示式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"。相當有趣,也相當實用。