Проблема с регулярным выражением Ruby - PullRequest
1 голос
/ 17 января 2011

У меня есть этот 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>

И я пытаюсь извлечь только URL, с этим REGEX

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

И это возвращает

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

Что я могу сделать, чтобы остановить это, когда найти "?

Ответы [ 2 ]

3 голосов
/ 17 января 2011

Вздох.Regex и 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

Они найдут их, независимо от того, глубоко ли они вложены или все в одной строке.

3 голосов
/ 17 января 2011

Проблема в том, что * является жадным. Поставьте вопросительный знак после этого, чтобы сделать его непривлекательным.

Рабочее регулярное выражение (проверено на Rubular )

href\=\"(.*?)\"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...