使用hpricot获取href属性的一部分

时间:2010-10-30 22:29:03

标签: ruby xml regex hpricot

我想我需要一个hpricot和regex的组合。我需要搜索'a'标签,其'href'属性以'abc /'开头,并返回其后的文本,直到下一个正斜杠'/'。

所以,给定:

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

我需要回来: '12345' 和 '67890'

任何人都可以伸出援手吗?我一直在努力解决这个问题。

3 个答案:

答案 0 :(得分:0)

如何将字符串拆分为/

(我不知道Hpricot,但根据文档):

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

答案 1 :(得分:0)

或使用正则表达式:

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

答案 2 :(得分: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"]