2010-10-30 2 views
0

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

Так что, учитывая:

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

Мне нужно, чтобы вернуться: '12345' и '67890'

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

+1

«Вперед» слэш ?? – tchrist

+0

Как насчет разделения строки? – 2010-10-30 22:44:53

ответ

0

Вам не нужно регулярное выражение, но вы можете использовать его. Вот два примера, один с регулярным выражением, а другой без, используя 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

А как насчет расщепления строки на /?

(я не знаю Hpricot, но согласно документации):

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

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

s = '<a href="/abc/12345/xyz123/">One</a>' 
s =~ /abc\/([^\/]*)/ 
return $1 
+0

'One' – 2010-10-30 23:08:22

+0

з = ~/HREF = "\/а \/([^ \ /] *)/ – vurte

+0

HREF = '/ ABC/12345/spacesandsinglequotesandtabsandnewlines' – 2010-10-30 23:38:02

Смежные вопросы