[PERL] 貪婪和不貪婪比對 non-greedy match
分享完整連結 //n.sfs.tw/m10698
分享連結 [PERL] 貪婪和不貪婪比對 non-greedy match@精讚(文章歡迎轉載,請尊重版權註明連結來源)
2021-01-05 14:37:10 By 張○○
預設perl是貪婪比對,如果要取得不貪婪的比對,該怎麼做?
例如原資料
$s= "<v>4.0927331783e+01</v><v>1.1238305389e+01</v><v>2.2222222222e-05</v><v>4.9085522333e-01</v><v>1.0917031488e+01</v><v>3.1551812477e-01</v><v>2.3592746401e-01</v><v>3.2864064230e-01</v><v>0.0000000000e+00</v><v>1.3289184201e-02</v><v>0.0000000000e+00</v><v>2.7655057217e-01</v>";
如果單純想取第一筆的值,使用 =~ 運算子
這樣取到的 $1會是
4.0927331783e+01</v><v>1.1238305389e+01</v><v>2.2222222222e-05</v><v>4.9085522333e-01</v><v>1.0917031488e+01</v><v>3.1551812477e-01</v><v>2.3592746401e-01</v><v>3.2864064230e-01</v><v>0.0000000000e+00</v><v>1.3289184201e-02</v><v>0.0000000000e+00</v><v>2.7655057217e-01
使用不貪婪比對 (Non-greedy match),只要把 *, +, ?, {} 後面多加一個問號即可:
* => *?
+ => +?
? => ??
{} => {}?
因此,原式只要寫成這樣即可:
結果:
4.0927331783e+01
相關連結
https://www.oreilly.com/library/view/perl-cookbook/1565922433/ch06s16.html
[Rocky9] 安裝node.js 18, node.js 20
原本的nodejs16在使用 quasar dev時出現錯誤,得升級成18版以上
[SSL] Could not read certificate from server.cer 的錯誤排除
在轉換ssl憑證時,出現無法讀取的錯誤,可是怎麼看憑證都很正常,該怎麼解決?
[Linux] 如何能知道我是什麼時候安裝系統的?
linux想知道什麼時候裝系統的? 不必憑記憶。
地圖填色的網站
我們想為國家填色不需要小畫家,這個網站能幫助你
[Linux] 列出所有目錄及所占空間的方法
想知道目錄下的所有目錄所占的空間大小?
[Linux] grep 排除特定字串
使用 -v 參數可以讓grep排除特定字串的方法