0

我有这个正则表达式:

<li><i>(?:<a.*?>)?(.*)(?:<.*?>)?</i></li>

现在,这应该与此文本匹配:

<li><i><a href="hello.htm">Hi there</a></i></li>

或者没有<a>标签,像这样:

<li><i>42nd Street</i></li>

没有<a>标签,正则表达式工作得很好,问题是,在第一个例子中,我得到了这个匹配:

Hi there</a>

我读过关于忽略分组的文章,(?:regex)但我不知道为什么它坚持包含结束</a>标签什么正则表达式会忽略结束</a>标签,所以我只会在那里得到你好

4

1 回答 1

2

(.*)您正在捕获的 是贪婪的,并且在(?:<.*?>)?它之后是可选的,因此(.*)将始终包含</a>. 要解决此问题,请将其更改.*.*?惰性(匹配尽可能少的字符:

<li><i>(?:<a.*?>)?(.*?)(?:<.*?>)?</i></li>

但不要使用正则表达式解析 HTML。

于 2012-06-10T21:04:23.763 回答