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デフォルトでgreedyであることです。これは、可能な限り多くの文字列に一致することを意味します。

量指定子にa を追加する?と、非貪欲になり、「次のパターンが始まるところで停止する」ことを意味します。

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

以下も参照してください。

于 2013-08-01T05:12:00.790 に答える