第二章-扩展的例子续-用正则表达式修改文本

4、用正则表达式修改文本 perl中用$var =~ s/regex/replacement/来替换文本,如$var =~ s/Jeff/Jeffrey/;用Jeffrey来替换Jeff,这里Jeff是正则表达式,Jeffrey 是自定义文本。举例1:保留小数点3位,如果第三位为0,则只保留2位,如12.3750000000392->12.375,37.5000->37.50 $price =~ s/(/./d/d[1-9]?)/d*/$1/ 这里将/./d/d[1-9]?放在()内,可以匹配.xx或.xxx,$1用来取代前面字符串举例2:从来信中取出来信人,时间,收信人,标题等,填入回信中 while ($line = <>) {相当于c中的getline() if ($line =~ m/^/s*$/ ) {去掉空行 last; } if ($line =~ m/^Subject: (.*)/) {匹配Subject: Be seein' ya around $subject = $1; } if ($line =~ m/^Date: (.*)/) {匹配Date: Thu, Feb 29 1997 11:15 $date = $1; } if ($line =~ m/^Reply-To: (/S+)/) {匹配Reply-To: elvis@hh.tabloid.org,且将elvis@hh.tabloid.org编组 $reply_address = $1; } if ($line -- m/^From: (/S+) /(([^()]*)/)/) {匹配From: elvis@tabloid.org (The King),且将The King编组,这里注意[^()]* $replyaddress = $1; $from_name = $2; } } 举例3:在数字中添加,如12345678->12,345,678 要在数字中添加逗号,必须从右边开始,每3个加一个逗号,但前面所述正则表达式都是从左边开始匹配,如何解决?前向引用:(?=…) positive lookahead 后向引用:(?<=…) lookbehind 如by Jeffery Friedl,用正则表达式(?=Jeffery)表示匹配J前面的位置,而不实际匹配字符(Lookaround doesn't "consume" text),正则表 达式(?=Jeffery)Jeff在by Jeffery Friedl匹配Jeff,而在by Thomas Jefferson中不匹配,因为不满足前向引用。(注意正则表达式Jeff(? =ery)与(?=Jeffery)Jeff相同效果)。在文"see Jeffs book"中,表达式(?<=Jeff)(?=s)匹配jeff和s中间的位置,如果要将Jeffs替换为 Jeff's,可以用这个表达式s/(?<=Jeff)(?=s)/'/,注意,s/../../是perl中的替换语法,而且这里出现了一个新东西,即用字符替换位置的概 念
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值