我有一个文本,里面有很多单词和链接。我想在里面找到一个特定的链接。我目前使用:
preg_match('/http://www.myserver.com/.*.(rar|zip|tar|gz)/',$text,$result)
现在让我们假设我有这样的文本:
bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla <a href="http://www.myserver.com/test.zip">http://www.myserver.com/somefile.zip</a> bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
预期的结果是:
http://www.myserver.com/test.zip
但脚本将返回:
http://www.myserver.com/test.zip">http://www.myserver.com/somefile.zip
我想我需要告诉它在到达第一个".zip"后停止,但是。。。怎样
问题是默认情况下preg_match
是贪婪。这意味着它将尽可能多地匹配字符串。
如果你在量词中添加一个?
,它将使其不贪婪,意思是"在下一个模式开始的地方停止"
preg_match('/http://www.myserver.com/.*?.(rar|zip|tar|gz)/',$text,$result);
// ----^
另请参阅:
- php preg_match非贪婪
- http://www.regular-expressions.info/repeat.html