正则表达式解码html

时间:2009-09-28 19:54:57

标签: c# regex

我有以下正则表达式,并希望它匹配以下两行。它似乎匹配它找到的第一个结束标记而不是最后一个。如何修改以找到最后一个而不是第一个。

 Regex: &lt;div(?<Attr>.*?)&gt;(?<Content>.*?)&lt;/div&gt;

    Currently matches: &lt;div class="test"&gt;Test Div&lt;/div&gt;

    Needs to match: &lt;div class="test"&gt;Test Div&lt;div&gt;Another Test&lt;/div&gt;&lt;/div&gt;

3 个答案:

答案 0 :(得分:2)

不是真正的答案,而是基于经验的观察。一般来说,基于正则表达式的模式匹配HTML方法会给你带来无尽的悲伤,并且最终无法正常工作,因为HTML不是常规语言。相反,我建议看看基于DOM的机制。我已经使用了jQueryphpQuery来大大提高成功率来处理HTML文档中的内容。

答案 1 :(得分:0)

你正在使用非贪婪量词*?,它将被扩展到尽可能少的重复。如果您想尽可能匹配,请使用不带?的贪婪版本。

但一般来说,正则表达式不适合像HTML这样的非常规语言。您最好使用HTML解析器。

答案 2 :(得分:0)

正则表达式通常是贪婪的,这意味着它会尝试找到最后一场比赛,你需要做什么,你可以通过电话来匹配/ div&gt;两次,或者只包括唯一的;&lt; / div&gt;在那之前。