Получение части атрибута href с использованием hpricot - PullRequest
0 голосов
/ 31 октября 2010

Мне кажется, мне нужна комбинация hpricot и regex.Мне нужно искать теги «a» с атрибутом «href», который начинается с «abc /» и возвращает следующий за ним текст до следующей косой черты »/'.

Итак, учитывая:

<a href="/abc/12345/xyz123/">One</a>
<a href="/abc/67890/xyzabc/">Two</a>

Мне нужно вернуться: «12345» и «67890»

Кто-нибудь может протянуть руку?Я боролся с этим.

Ответы [ 3 ]

0 голосов
/ 31 октября 2010

или используйте регулярное выражение:

s = '<a href="/abc/12345/xyz123/">One</a>'
s =~ /abc\/([^\/]*)/
return $1
0 голосов
/ 31 октября 2010

Вам не нужно регулярное выражение, но вы можете использовать его. Вот два примера, один с регулярным выражением, а другой без использования Nokogiri, который должен быть совместим с Hpricot для вашего использования и использует CSS-методы доступа:

require 'nokogiri'

html = %q[
  <a href="/abc/12345/xyz123/">One</a>
  <a href="/abc/67890/xyzabc/">Two</a>
]

doc = Nokogiri::HTML(html)
doc.css('a[@href]').map{ |h| h['href'][/(\d+)/, 1] } # => ["12345", "67890"]
doc.css('a[@href]').map{ |h| h['href'].split('/')[2] } # => ["12345", "67890"]
0 голосов
/ 31 октября 2010

А как насчет разделения строки на /?

(я не знаю Hpricot, но по документам):

doc.search("a[@href]").each do |a|
    return a.somemethodtogettheattribute("href").split("/")[2]; // 2, because the string starts with '/'
end
...