|
本帖最后由 xiaoliu 于 2011-11-14 20:49 编辑
在前面的例子中你可能已经注意到,s///值进行一次替换,无论是否还有地方还能匹配上。当然,这只是默认的行为。修饰
符/g 要求s///将不相重叠◆的所有匹配上的部分都进行替换:
◆它是不相重叠的,因为每一次新的匹配都是从最近匹配成功的地方之后开始进行的。
$_ = “home, sweet home!”;
s/home/cave/g;
print “$_\n”; # “cave, sweet cave!”;
全局替换的一个常用地方是将多个空格用单个空格替换掉:
$_ =“Input data\t may have extra whitespace.”;
s/\s+/ /g; #现在是“Input data may have extra whitespace.”
现在已经知道怎样去掉多余的空格,那怎样去掉开头和结尾的空白呢?这是非常容易的:
s/^\s+//; #将开头的空白去掉
s/\s+$//; #将结尾的空白去掉
我们可以使用/g,只用一步来完成,,但这可能影响效率,至少在我们写作此书时是这样。正则表达式通常是可被优化的,
想了解更多的信息,可以参看《掌握正则表达式》(Mastering Regular Expressions)(O’Reilly),其中有关于如何使正则表达式
更快(或者更慢)的讨论。
s/^\s+|\s+$//g; #将开头,结尾的空白去掉
|
|