2010-08-17 50 views
1

首先,我不是正则表达式的专家,所以我很确定我做错了什么。这个正则表达式有什么问题?

这里是我的正则表达式:

<(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是空的althoug群体\1\2都很好。

任何想法将非常感激。

+12

你的正则表达式的问题是你正在使用它来解析HTML。 – cletus 2010-08-17 03:58:21

+3

澄清cletus的答案(这是这个问题的正确答案):http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – Borealid 2010-08-17 04:00:11

+3

...现在你有两个问题。 /因为我们引出陈词滥调。 – dmckee 2010-08-17 04:01:32

回答

6

此问题无法通过正则表达式匹配来解决。认真。我不只是重复“不要用正则表达式解析HTML”教条;正则表达式是逻辑上无法处理嵌套的标签(这就是为什么大家说:“不与解析HTML正则表达式”)

我可以给你是使用XML解析器最好的办法。如果你坚持使用正则表达式来解决这个问题,那么无论如何你都会写下你自己的递归下降解析器,所以你不妨利用别人在这个问题上所做的工作。

+0

感谢您花时间不只是说“你不能”。 – Freddy 2010-08-17 04:14:54

+0

不客气......你似乎没有被评论所信服,所以我想了一些解释可能会有所帮助。 – 2010-08-17 04:44:56

相关问题