php regex preg_match - 在第一个分隔符后停止

时间:2013-08-01 05:10:32

标签: php regex string

我的文字包含很多单词和链接。我想在其中找到一个特定的链接。我目前使用:

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”之后停止但是......怎么样?

1 个答案:

答案 0 :(得分:2)

问题是preg_match默认为贪婪。这意味着它将匹配尽可能多的字符串。

如果你将?添加到量词,它会使它变得非贪婪,意味着“停止下一个模式开始的地方”

preg_match('/http:\/\/www\.myserver\.com\/.*?\.(rar|zip|tar|gz)/',$text,$result);
//                                      ----^

另见: