manejo - regular expression ruby
¿Cómo hago una búsqueda de expresiones regulares en Nokogiri para el texto que coincide con un principio determinado? (4)
Usa la función xpath starts-with
:
value.xpath(''//p[starts-with(@id, "para-")]'').each { |x| puts x[''id''] }
Dado:
require ''rubygems''
require ''nokogiri''
value = Nokogiri::HTML.parse(<<-HTML_END)
"<html>
<body>
<p id=''para-1''>A</p>
<div class=''block'' id=''X1''>
<h1>Foo</h1>
<p id=''para-2''>B</p>
</div>
<p id=''para-3''>C</p>
<h2>Bar</h2>
<p id=''para-4''>D</p>
<p id=''para-5''>E</p>
<div class=''block'' id=''X2''>
<p id=''para-6''>F</p>
</div>
</body>
</html>"
HTML_END
Quiero hacer algo como lo que puedo hacer en Hpricot:
divs = value.search(''//div[@id^="para-"]'')
- ¿Cómo hago una búsqueda de patrón para elementos en estilo XPath?
- ¿Dónde encontraría la documentación para ayudarme? No vi esto en los documentos.
Y algunos documentos que estás buscando:
- Nokogiri: http://nokogiri.org/
- XPath: http://www.w3.org/TR/xpath20/
- Selectores CSS3: http://www.w3.org/TR/selectors/
Nokogiri::XML::Node.send(:define_method, ''xpath_regex'') { |*args|
xpath = args[0]
rgxp = ///([a-z]+)/[@([a-z/-]+)~=//(.*?)///]/
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)
}
Uso:
divs = Nokogiri::HTML(page.root.to_html).
xpath_regex("//div[@class~=/axtarget$/]//div[@class~=/^carbo/]")
divs = value.css(''div[id^="para-"]'')