Re: [問題] 請問Ruby的正規表現式如何使用Shortest …

看板Ruby作者 (godfat 真常)時間17年前 (2008/08/28 01:43), 編輯推噓1(104)
留言5則, 3人參與, 最新討論串1/1
※ 引述《Romulus (羅姆修復計畫開始)》之銘言: : 我現在有一個剌剌長的html file : 我要把其中的<a href="....">TEXT</a>都換成[[TEXT]] : 我想用regular expression來作,可是因為String.gsub!用的都是longest matching, 沒聽過這種說法,一般聽到的都是說 greedy, 好奇在哪個環境中是用這種說法?我覺得比 greedy 好懂 ._. 參考: http://en.wikipedia.org/wiki/Regular_expression#Lazy_quantification : 所以如果本文是: : <a href="...">TEXT1</a> : <a href="...">TEXT2</a> : 下txt.gsub!(%r{<a href=.*>(.*)</a>}, '[[\+]]') : 就會只剩下[[TEXT2]],TEXT1不見了 實際上這邊沒有用 multiline 的 modifier 的話,不會有你說的狀況 @@ multiline 是在最後加 m, 如:%r{<a href=.*>(.*)</a>}m 也可以加 i 表示 case-insensitive : 請問有辦法在Ruby裡面使用shortest matching嗎? 如上網址所說明, .*? 就是了 另外我不建議用 regexp 去 parse html, 碰到複雜的情況會沒辦法解, 除非你不在意精確度。否則我會建議用 hprioct, 可以對付不正確的 html. 如果確保 input 一定是 valid xml, 可以用 rexml. (不過看起來你的情況跑 regexp 好像也夠) -- By Gamers, For Gamers - from the past Interplay -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.135.28.18

08/28 21:13, , 1F
longest matching...我自己腦內 囧> 這麼說來一般講greedy
08/28 21:13, 1F

08/28 21:13, , 2F
.*? works,感謝!
08/28 21:13, 2F

08/28 21:13, , 3F
我只是要parse特定的東西 所以目前regex就夠了
08/28 21:13, 3F

08/29 15:19, , 4F
原來如此... XD 不謝
08/29 15:19, 4F

08/31 11:05, , 5F
可以考慮分兩段match,先找<a href=..>之後,再找</a>前
08/31 11:05, 5F
文章代碼(AID): #18jP9Jyu (Ruby)
文章代碼(AID): #18jP9Jyu (Ruby)