Ruby正则表达式的问题

时间:2011-01-17 19:02:08

标签: ruby regex web-crawler

我有这个HTML代码,只有一行:

<h3 class='r'><a href="www.google.com">fkdsafjldsajl</a></h3><h3 class='r'><a href="www.google.com">fkdsafjldsajl</a></h3>

这是行友好版本(我不能使用)

<h3 class='r'><a href="www.google.com">fkdsafjldsajl</a></h3>
<h3 class='r'><a href="www.google.com">fkdsafjldsajl</a></h3>

我正在尝试使用此REGEX提取网址

/<h3 class="r"><a href="(.*)">(.*)<\/a>/

它返回

www.google.com">fkdsafjldsajl</a></h3><h3 class='r'><a href="www.google.com"

找到“?

时,我该怎么做才能阻止它?

2 个答案:

答案 0 :(得分:3)

问题在于*是贪婪的。在它之后加上一个问号,使其不合适。

使用正则表达式(在rubular上测试)

href\=\"(.*?)\"

答案 1 :(得分:3)

叹息。正则表达式和HTML是如此尴尬的同床人:

require 'nokogiri'

html = %q{<h3 class='r'><a href="www.google.com">fkdsafjldsajl</a></h3><h3 class='r'><a href="www.google.com">fkdsafjldsajl</a></h3>}
doc = Nokogiri::HTML(html)
puts doc.css('a').map{ |a| a['href'] }
# >> www.google.com
# >> www.google.com

无论是深层嵌套还是全部在一条线上,都可以找到它们。