正则表达式应匹配链接的文本和未链接的文本

时间:2012-06-10 21:00:10

标签: regex

我有这个正则表达式:

<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>标记所以我只会得到你好

1 个答案:

答案 0 :(得分:2)

您捕获的(.*)是贪婪的,(?:<.*?>)?是可选的,因此(.*)将始终包含</a>。要解决此问题,请将.*更改为.*?,使其变得懒惰(匹配尽可能少的字符:

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

But don't parse HTML with regex.