我怎么能写一个匹配非贪婪的正则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'。