开发者

Problem with Ruby Regular Expression

开发者 https://www.devze.com 2023-02-05 16:53 出处:网络
I have this HTML code, that\'s on a single line: <h3 class=\'r\'><a href=\"www.google.com\">fkdsafjldsajl</a></h3><h3 class=\'r\'><a href=\"www.google.com\">fkdsaf

I have this HTML code, that's on a single line:

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

Here is the line-friendly version (that i can't use)

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

And i'm trying to extract just the URLs, with this REGEX

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

And it returns

www.google.com">fkd开发者_C百科safjldsajl</a></h3><h3 class='r'><a href="www.google.com"

What can I do to stop it when find a " ?


Sigh. Regex and HTML are such awkward bedfellows:

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

This will find them, whether they are deeply nested or all on one line.


The problem is that * is greedy. Put a question mark after it to make it ungreedy.

Working regex (tested on rubular)

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

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号