2016-10-31 166 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解析器可能是更好的選擇。