我怎么能写一个匹配非贪婪的正则expression式?

我需要关于非贪婪选项的正则expression式匹配的帮助。

匹配模式是:

<img\s.*> 

要匹配的文字是:

 <html> <img src="test"> abc <img src="a" src='a' a=b> </html> 

我在http://regexpal.com上testing

这个expression式匹配从<img到last >所有文本。 我需要它匹配最初的<img之后遇到的第一个,所以在这里我需要得到两个匹配,而不是我得到的。

我尝试过所有非贪婪的组合? ,没有成功。

非贪心? 工作得很好。 只是你需要在你正在testing的正则expression式引擎( regexpal ,你使用的引擎,也有这个选项)中select点匹配所有选项。 这是因为,正则expression式引擎在使用时通常不会匹配换行符. 。 你需要明确地告诉他们,你也希望匹配换行符.

例如,

 <img\s.*?> 

工作正常!

在这里检查结果 。

另外,请阅读关于在不同的正则expression式中的行为 。

这个? 操作数使匹配非贪婪。 例如.*是贪婪的,而.*? 不是。 所以你可以使用像<img.*?>来匹配整个标签。 或<img[^>]*>

但请记住,整个HTML集合不能用正则expression式实际parsing。

检查堆栈溢出问题在正则expression式的上下文中,懒惰和贪婪是什么意思? 以及。

贪婪的手段匹配最长的string。

懒惰意味着匹配尽可能短的string。

例如,贪婪的h。+ l匹配'hello'中的'hell',但懒惰的h。+?l匹配'hel'。