匹配<div> </div>标记与ruby中的正则表达式

时间:2012-11-15 22:07:40

标签: ruby regex html

有人能告诉我如何将<div>标记的开头与</div>标记的结尾与Ruby中的正则表达式匹配?

例如,假设我有一个:

<div>
<p>test content</p>
</div>

到目前为止,我有这个:

< div [^>]* > [^<]*<\/div>

但它似乎没有用。

3 个答案:

答案 0 :(得分:1)

要在<div>全部在一行上时匹配,请使用:

/<div[^>]*>/

但是,这会在标记内部带有换行符的任何标记上中断。如果<div之间有空格,它也会中断。

最后,在您添加了所有可能的标记写入方式的额外检查之后,您将需要考虑一种更好的方法,即使用像Nokogiri这样的解析器,它可以使用HTML和XML更容易。

例如,因为你试图撕开HTML:

<div>
<p>test content</p>
</div>

很容易猜到你真的想要“测试内容”。如果HTML更改为:

,该怎么办?
<div><p>test content</p></div>

或更糟:

<div
><p>
test
content
</div>

浏览器不关心,也不会是一个好的解析器,但正则表达式会让人心烦意乱并需要返工。

require 'nokogiri'
require 'pp'

doc = Nokogiri.HTML(<<EOT)
    <div
    ><p>
    test
    content
    </div>
EOT
pp doc.at('p').text.strip.gsub(/\s+/, ' ')
# => "test content"

这就是我们推荐解析器的原因。

答案 1 :(得分:1)

Nokogiri很棒但是,imho,有些情况下无法使用。

对于你的情况,你可以使用它:

puts str.scan(/<div>(.*)<\/div>/im).flatten.first

<p>test content</p>

答案 2 :(得分:0)

像{0}}这样的HTML解析器可能比使用PinnyM指出的Regex更好。

Nokogiri是Nokogiri页面上的教程,介绍了如何搜索HTML / XML文档。

这个Here演示了类似于使用CSS选择器完成的操作。也许这样的事情对你有用。