首先,我不是正则表达式专家,所以我很确定我做错了什么。
这是我的正则表达式:
<(list)(\b[^>]*)>(<\1\b[^>]*>.*?<\/\1>|.)*?<\/\1>
这是输入字符串:
...
<list title="Lorem ipsum dolor sit amet, consectetur adipiscing elit...">
<li>
<list title="Lorem adipiscing...">
<li>Lorem ipsum dolor sit amet, consectetur adipiscing elit</li>
<li>Lorem ipsum dolor sit amet, consectetur adipiscing elit</li>
</list>
</li>
<li>
<list title="Lorem ipsum...">
<li>Lorem ipsum dolor sit amet, consectetur adipiscing elit</li>
</list>
</li>
<li>Lorem ipsum dolor sit amet, consectetur adipiscing elit
</li>
<li>Lorem ipsum dolor sit amet, consectetur adipiscing elit
</li>
</list>
...
我希望匹配外部<list>
并抓住包括intertal <list>
在内的所有内容,但是当我尝试阅读该群组时,\3
是空的\1
和\2
很好。
非常感谢任何想法。
答案 0 :(得分:6)
使用正则表达式匹配无法解决此问题。认真。我不只是重复“不用正则表达式解析HTML”的教条;正则表达式在逻辑上无法处理嵌套标记(为什么每个人都说“不用正则表达式解析HTML”)
我能给你的最好的想法是使用XML解析器。如果你坚持使用正则表达式来解决这个问题,你最终会编写自己的递归下降解析器,所以你也可以利用其他人已经对这个问题所做的工作。