3

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

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”后停止但是......如何?

4

1 回答 1

2

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

如果将 a 添加?到量词中,它将使其不贪婪,这意味着“在下一个模式开始的地方停止”

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

也可以看看:

于 2013-08-01T05:12:00.790 回答