代碼如下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文檔格式的嚴謹,應不會有這種情況出現,故就不對表達式再進行優化了。
是可以將匹配的結果讀取到數組中去的,不知您使用的何種語言,故無法給出代碼。
- 2 回答
- 0 關注
- 731 瀏覽
添加回答
舉報
0/150
提交
取消