2014-09-29 148 views
1

代码在这里。我的问题是因为$1Fred这是一个替代品,这意味着替换fred or barneyFred,为什么不能像I saw FRED with FRED.我不知道这里发生了什么。谢谢您的回答!Perl正则表达式替换

$_ = "I saw Barney with Fred."; 
s/(fred|barney)/\U$1/gi; # $_ is now "I saw BARNEY with FRED." 

回答

0

$1指的是“无论第一个捕获组捕获什么”。所以当(fred|barney)匹配fred,这就是$1包含,但是当它匹配barney时,那么$1包含什么。

+0

谢谢,现在我明白了。它首先看到'barney',然后看到'fred','$ 1'仍然是最后一个值。 – Yaolong 2014-09-29 07:55:59

1

因为捕获组不仅抓住了串FredBarney。因此,如果正则表达式引擎看到Fred,它会立即用大写FRED替换,如果引擎看到Barney,则将其替换为Uppercase Barney。