2016-10-31 126 views
0

我有这样的示例代码:模式来获取所有标签

<ul><li><a href="http://www.example.com/aaa" class="tag">aaa</a></li><li><a href="http://www.example.com/bbb" class="tag">bbb</a></li><li><a href="http://www.example.com/ccc" class="tag">ccc</a></li></ul> 

我需要得到aaabbbccc标签,我写了这个模式:

/<a .* class=\"tag\">(.*?)<\/a>/ 

但这回错误的结果。你可以看到结果here

发生了什么,我该如何解决?

+1

在第一个星号后加一个问号星号:'/ (。*?)<\/a> /'。你可以通过搜索[贪婪和懒惰]进一步调查此问题(http://stackoverflow.com/questions/2301285/what-do-lazy-and-greedy-mean-in-the-context-of-regular-expressions)正则表达式在谷歌 – Rodolfo

+0

@Rodolfo谢谢,我在第二部分使用'?',但我忘记了在第一部分中使用。为什么你不作为答案张贴?! –

回答

3

你让你的第二个.*非贪婪,但不是你的第一个。由于这种贪婪的匹配,它匹配了从开头<a直到第三个开头<a结束的所有内容。简单的解决方法是使第一非贪婪太:

<a .*? class=\"tag\">(.*?)<\/a> 

下面是更新regex101。这就是说,根据您选择的语言提供的内容,以及您是否期待(甚至非常轻微)不同的HTML字符串,HTML解析器可能是更好的选择。