如何在Nokogiri中进行正则表达式搜索以查找与某个开头相匹配的文本?

鉴于:

require 'rubygems' require 'nokogiri' value = Nokogiri::HTML.parse(<<-HTML_END) "  

A

Foo

B

C

Bar

D

E

F

" HTML_END

我想做一些像我在Hpricot中可以做的事情:

 divs = value.search('//div[@id^="para-"]') 
  1. 如何在XPath样式中搜索元素的模式?
  2. 我在哪里可以找到帮助我的文档? 我没有在rdocs中看到这一点。

使用xpath函数starts-with

 value.xpath('//p[starts-with(@id, "para-")]').each { |x| puts x['id'] } 
 divs = value.css('div[id^="para-"]') 

还有一些你正在寻找的文档:

  • Nokogiri: http ://nokogiri.org/
  • XPath: http : //www.w3.org/TR/xpath20/
  • CSS3选择器: http : //www.w3.org/TR/selectors/
 Nokogiri::XML::Node.send(:define_method, 'xpath_regex') { |*args| xpath = args[0] rgxp = /\/([az]+)\[@([az\-]+)~=\/(.*?)\/\]/ xpath.gsub!(rgxp) { |s| m = s.match(rgxp); "/#{m[1]}[regex(.,'#{m[2]}','#{m[3]}')]" } self.xpath(xpath, Class.new { def regex node_set, attr, regex node_set.find_all { |node| node[attr] =~ /#{regex}/ } end }.new) } 

用法:

 divs = Nokogiri::HTML(page.root.to_html). xpath_regex("//div[@class~=/axtarget$/]//div[@class~=/^carbo/]")