为了账号安全,请及时绑定邮箱和手机立即绑定

perl 数组匹配

perl 数组匹配

墨色风雨 2019-04-12 07:06:07
代码如下open(LINE,"d:/top.txt");while (<LINE>){if(m/(Total copper :)(.*)(sq\/mm)/){$top = $2};}close LINE;$T = sprintf("%.2f",$top / 10000)top.txt内容如下Total copper : 25053.227 sq/mm为什么最后输出的是00.0while (<LINE>){if(m/(Total copper :)(.*)(sq\/mm)/){$top = $2};}这句不是已经捕获了25053.227了吗?
查看完整描述

2 回答

?
浮云间

TA贡献1829条经验 获得超4个赞

(?<=<item>).*?(?=</item>)

这里使用宽度断言和勉强模式重复。
(?<=<item>)表示匹配内容的左边满足表达式<item>,
(?=</item>)表示匹配内容的右边满足表达式<\item>,
.*? 表示是勉强模式匹配(即匹配最少的内容),之所以使用勉强模式匹配是因为,如果使用贪婪模式则会出现和您的表达式出现的同样问题。但这个表达式也存在有bug,即如果出现如下的:
<?xml version="1.0" encoding="UTF-8"?>
<rss>
<channel>
<title>TITLE</title>
<link>LINK</link>
<item><title>T1</title><link>L1</item></link><description>D1</description></item>
<item><title>T2</title><link>L2</link><description>D2</description></item>
</channel>
</rss>
则匹配就不准确了,不过考虑到xml文档格式的严谨,应不会有这种情况出现,故就不对表达式再进行优化了。

是可以将匹配的结果读取到数组中去的,不知您使用的何种语言,故无法给出代码。



查看完整回答
反对 回复 2019-04-13
  • 2 回答
  • 0 关注
  • 685 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信