regulares regular manejo expresiones ejemplo contar caracteres cadenas ruby nokogiri hpricot

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-"]'')

  1. ¿Cómo hago una búsqueda de patrón para elementos en estilo XPath?
  2. ¿Dónde encontraría la documentación para ayudarme? No vi esto en los documentos.


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-"]'')