有人能告诉我如何将<div>
标记的开头与</div>
标记的结尾与Ruby中的正则表达式匹配?
例如,假设我有一个:
<div>
<p>test content</p>
</div>
到目前为止,我有这个:
< div [^>]* > [^<]*<\/div>
但它似乎没有用。
答案 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)