我有这个正则表达式:
<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>
标记所以我只会得到你好?
答案 0 :(得分:2)
您捕获的(.*)
是贪婪的,(?:<.*?>)?
是可选的,因此(.*)
将始终包含</a>
。要解决此问题,请将.*
更改为.*?
,使其变得懒惰(匹配尽可能少的字符:
<li><i>(?:<a.*?>)?(.*?)(?:<.*?>)?</i></li>