Ruby正则表达式的问题
我有一行HTML代码:Ruby正则表达式的问题,ruby,regex,web-crawler,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> 这是线路友好的版本(我不能使用) 我正试图用这个正则表达式提取URL /<h3 class="r"><a
<h3 class='r'><a href="www.google.com">fkdsafjldsajl</a></h3><h3 class='r'><a href="www.google.com">fkdsafjldsajl</a></h3>
这是线路友好的版本(我不能使用)
我正试图用这个正则表达式提取URL
/<h3 class="r"><a href="(.*)">(.*)<\/a>/
/问题在于*
是贪婪的。在它后面打一个问号,使它不粘
工作正则表达式(在上测试)
问题是*
是贪婪的。在它后面打一个问号,使它不粘
工作正则表达式(在上测试)
唉。正则表达式和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
需要“nokogiri”
html=%q{}
doc=Nokogiri::HTML(HTML)
放置doc.css('a').map{| a | a['href']}
#>>www.google.com
#>>www.google.com
这将找到它们,无论它们是深嵌套的还是全部在一行中。叹气。正则表达式和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
需要“nokogiri”
html=%q{}
doc=Nokogiri::HTML(HTML)
放置doc.css('a').map{| a | a['href']}
#>>www.google.com
#>>www.google.com
这将发现它们,无论它们是深嵌套的还是全部在一行。甚至(.*)“
都可以吃”
。最好使用[^“]+”
。我不知道OPs用例是否会遇到用单引号括起来的href,但是,由于它们在HTML中是合法的,建议的模式可能会处理这些。而且,由于很多HTML都缺少双引号和单引号,它可能也应该处理这个问题。此外,根据URL第2.2节倒数第二段,“
和”
在URL中是合法的,因此它可能也应该处理这些。即使(.*)“
也可以吃”
。更好地使用[^]+“
。我不知道OPs用例是否会遇到用单引号括起来的href,但是,由于它们在HTML中是合法的,建议的模式可能会处理这些问题。而且,由于很多HTML都缺少双引号和单引号,它可能也应该处理这个问题。此外,根据URL第2.2节倒数第二段,“
和“
在URL中是合法的,所以它可能也应该处理这些。使用正则表达式解析HTML时要非常小心。即使是在简单的HTML中,您也可能会遇到一个URL,它会弄乱您的正则表达式。即使在简单的HTML中,您也可能会遇到一个URL,它会弄乱您的正则表达式。
href\=\"(.*?)\"
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