Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby正则表达式的问题_Ruby_Regex_Web Crawler - Fatal编程技术网

Ruby正则表达式的问题

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

我有一行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 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