找回密码
 注册
查看: 19288|回复: 0

perl语言正则表达式使用s///进行替换

[复制链接]
发表于 2011-11-14 20:47:53 | 显示全部楼层 |阅读模式
如果将m// 这个模式匹配看作同文字处理器的“查询(search)”类似的功能,那Perl 中s ///操作的则类似于“查询并替换
(search and replace)”。它将替换变量中◆模式所匹配上的部分:
◆同m//不一样,m//可以和任何字符串表达式进行匹配,s///只能修改被称为左值(lvalue)的数据。这通常是一个变量,虽然它可以是任
何可在赋值符左侧出现的东西。
$_ =“He’s out bowling with Barney tonight.”;
s/Barney/Fred/; #Barney 被Fred 替换掉
print “$_\n”;
如果没有匹配上,则什么也不会发生,此变量也不会有任何更改:
#接上例:现在$_ 为“He’s out bowling with Fred tonight.”
s/Wilma/Betty/; #用Wilma 替换Betty(失败)
模式和被替换的字符串可能更复杂。下例中,替换的字符串使用了变量:$1,其值由模式匹配所赋值:
s/with (\w+)/agaist $1’s team/;
print “$_\n”; #为“He’s out bowling against Fred’s team tonight”;
下面还有些其它可能的替换方法。(它们在这里只是作为例子出现。在实际代码中,很少在一行中做这么多不相关的替换。)
$_ =“green scaly dinosaur”;
s/(\w+) (\w+)/$2, $1/; #现在为“scaly, green dinosaur”;
s/^/huge, /; #现在为“huge, scaly, green dinosaur”
s/,.*een//; #空替换,现在为“huge dinosaur”
s/green/red/; #匹配失败,仍然为“huge dinosaur”
s/\w+$/($`!)$& /; #现在为“huge (huge !)dinosaur”
s//\s+(!\W+)/$1 /; #现在为“huge (huge!) dinosaur”
s/huge/gigantic/; #现在为“gigantic (huge!) dinosaur”
s///会返回一个Boolean 值。如果成功替换则返回true;否则返回false:
$_ = “fred flintstone”;
if(s/fred/wilma/){
print “Successfully replaced fred with wilma!\n”;
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|小黑屋|生物统计家园 网站价格

GMT+8, 2024-11-21 19:40 , Processed in 0.039169 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表