这个正则表达式有什么问题?

时间:2010-08-17 03:56:50

标签: xml regex

首先,我不是正则表达式专家,所以我很确定我做错了什么。

这是我的正则表达式:

<(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很好。

非常感谢任何想法。

1 个答案:

答案 0 :(得分:6)

使用正则表达式匹配无法解决此问题。认真。我不只是重复“不用正则表达式解析HTML”的教条;正则表达式在逻辑上无法处理嵌套标记(为什么每个人都说“不用正则表达式解析HTML”)

我能给你的最好的想法是使用XML解析器。如果你坚持使用正则表达式来解决这个问题,你最终会编写自己的递归下降解析器,所以你也可以利用其他人已经对这个问题所做的工作。