如何在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-"]')
- 如何在XPath样式中搜索元素的模式?
- 我在哪里可以找到帮助我的文档? 我没有在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/]")