作者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
1F:推 Romulus:longest matching...我自己脑内 囧> 这麽说来一般讲greedy 08/28 21:13
2F:→ Romulus:.*? works,感谢! 08/28 21:13
3F:→ Romulus:我只是要parse特定的东西 所以目前regex就够了 08/28 21:13
4F:→ godfat:原来如此... XD 不谢 08/29 15:19
5F:→ fishbudin:可以考虑分两段match,先找<a href=..>之後,再找</a>前 08/31 11:05