perl 数组匹配

代码如下open(LINE,"d:/top.txt");while(<LINE>){if(m/(Totalcopper:)(.*)(sq\/mm)/){$top=$2};... 代码如下

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.0

while (<LINE>){if(m/(Total copper :)(.*)(sq\/mm)/){$top = $2};}
这句不是已经捕获了25053.227了吗?

请高手指教

在线等
展开
 我来答
阴雪海
2011-05-20 · TA获得超过309个赞
知道小有建树答主
回答量:631
采纳率:0%
帮助的人:0
展开全部
(?<=<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文档格式的严谨,应不会有这种情况出现,故就不对表达式再进行优化了。

是可以将匹配的结果读取到数组中去的,不知您使用的何种语言,故无法给出代码。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
连续用6a43aa2
2011-05-19 · TA获得超过3747个赞
知道大有可为答主
回答量:7283
采纳率:72%
帮助的人:612万
展开全部
哈哈。。。这不是我写的吗??( ⊙o⊙ )哇 ( ⊙o⊙ )
open(LINE,"d:/top.txt");
while (<LINE>){if(m/(Total copper :)(.*)(sq\/mm)/){$top = $2};}
close LINE;

$T = sprintf("%.2f",$top / 10000)

这样就可以了
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
闽有你腐崽福D
2011-05-19 · TA获得超过316个赞
知道小有建树答主
回答量:248
采纳率:0%
帮助的人:92.7万
展开全部
$2被当成是字符串了,转化成数字试试。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式