Perl 的組匹配


從 Perl 中的正則表示式角度來看,除了前者更清晰以外,以下兩個表示式之間沒有區別。

$string =~ /(\S+)\s+(\S+)/;
and
$string =~ /\S+\s+\S+/;

然而,分組的優點是可以讓我們從正則表示式中提取一個序列。分組以其在原始表示式中的出現順序作為列表返回。例如,在下例中,我們已經從字串中提取出小時、分鐘和秒。

my ($hours, $minutes, $seconds) = ($time =~ m/(\d+):(\d+):(\d+)/);

除了這種直接方法以外,匹配到的分組還可以透過特殊的 $x 變數獲得,其中 x 是正則表示式中分組的編號。因此,我們可以按如下方式重寫前面的示例 −

示例

 演示

#!/usr/bin/perl
$time = "12:05:30";
$time =~ m/(\d+):(\d+):(\d+)/;
my ($hours, $minutes, $seconds) = ($1, $2, $3);
print "Hours : $hours, Minutes: $minutes, Second: $seconds\n";

當執行以上的程式碼段時,會輸出以下結果 −

Hours : 12, Minutes: 05, Second: 30

當在替換表示式中使用分組時,可以在替換文字中使用 $x 語法。因此,我們可以使用以下方式重新格式化日期字串 −

示例

 演示

#!/usr/bin/perl
$date = '03/26/1999';
$date =~ s#(\d+)/(\d+)/(\d+)#$3/$1/$2#;
print "$date\n";

當執行以上的程式碼段時,會輸出以下結果 −

1999/03/26

更新日期:2019 年 11 月 29 日

超過 2000 次瀏覽

開啟您的 職業

透過完成此課程獲得認證

開始
廣告
© . All rights reserved.