
182
|
第
9
章
my $text = "Barney Rubble Fred Flintstone Wilma Flintstone";
my %last_name = ($text =~ /(\w+)\s+(\w+)/g);
每次模式匹配成功,就会返回一对被捕获的值,而这一对值正好成为新哈希的键
-
值
对。
更强大的正则表达式
在读了三章有关正则表达式的内容后,你现在应该明白,这已成个一项深入
Perl
核心
的强大特性。但不止如此,
Perl
开发人员还在加入更多特性,你会在接下来的一节看
到其中最重要的几个。同时你也会看到正则表达式引擎更有趣的内部运作机制。
非贪婪量词
目前为止,我们看到的量词都是贪婪(
greedy
)量词。它们按照从最左端起最长匹配
的原则尽可能多地匹配文本,但有时候匹配范围过宽。
阅读下面的代码,我们想要把位于标签之间的名字都改成全大写版本:
my $text = '<b>Fred</b> and <b>Barney</b>';
$text =~ s|<b>(.*)</b>|<b>\U$1\E</b>|g;
print "$text\n";
但不会成功:
<b>FRED</B> AND <B>BARNEY</b>
发生了什么?我们尝试执行的是全局匹配并希望能匹配到两个结果,但实际匹配到几
个?
my $text = '<b>Fred</b> and <b>Barney</b>';
my $match_count = $text =~ s|<b>(.*)</b>|\U$1|g;
print
“