我有以下正则表达式,并希望它匹配以下两行。它似乎匹配它找到的第一个结束标记而不是最后一个。如何修改以找到最后一个而不是第一个。
Regex: <div(?<Attr>.*?)>(?<Content>.*?)</div>
Currently matches: <div class="test">Test Div</div>
Needs to match: <div class="test">Test Div<div>Another Test</div></div>
答案 0 :(得分:2)
不是真正的答案,而是基于经验的观察。一般来说,基于正则表达式的模式匹配HTML方法会给你带来无尽的悲伤,并且最终无法正常工作,因为HTML不是常规语言。相反,我建议看看基于DOM的机制。我已经使用了jQuery和phpQuery来大大提高成功率来处理HTML文档中的内容。
答案 1 :(得分:0)
你正在使用非贪婪量词*?
,它将被扩展到尽可能少的重复。如果您想尽可能匹配,请使用不带?
的贪婪版本。
但一般来说,正则表达式不适合像HTML这样的非常规语言。您最好使用HTML解析器。
答案 2 :(得分:0)
正则表达式通常是贪婪的,这意味着它会尝试找到最后一场比赛,你需要做什么,你可以通过电话来匹配/ div&gt;两次,或者只包括唯一的;&lt; / div&gt;在那之前。