作者godfat (godfat 真常)
看板Ruby
標題Re: [問題] 請問Ruby的正規表現式如何使用Shortest …
時間Thu Aug 28 01:43:44 2008
※ 引述《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
推 Romulus:longest matching...我自己腦內 囧> 這麼說來一般講greedy 08/28 21:13
→ Romulus:.*? works,感謝! 08/28 21:13
→ Romulus:我只是要parse特定的東西 所以目前regex就夠了 08/28 21:13
→ godfat:原來如此... XD 不謝 08/29 15:19
→ fishbudin:可以考慮分兩段match,先找<a href=..>之後,再找</a>前 08/31 11:05