1

我有以下正则表达式,我试图使用它从 wget 日志中获取所有图像 URL,这些 URL 指向除 150x150 像素以外的图像。

preg_match_all('/http:\/\/'.$url.'\/wp-content\/uploads\/\S+(?:150x150)\.(?:jpg|jpeg|png|gif)/', $wgetlog, $image_urls);

这个正则表达式有效。它给了我所有包含 150x150 字符串的 URL。如果我这样否定它:(?!150x150)导致:

preg_match_all('/http:\/\/'.$url.'\/wp-content\/uploads\/\S+(?!150x150)\.(?:jpg|jpeg|png|gif)/', $wgetlog, $image_urls);

它输出一个空数组。(是的,文件中有匹配的 URL)

感谢您的任何提示!

示例 URL 结构是http://url.com/wp-content/uploads/2009/09/name-of-the-file-150x150.pnghttp://url.com/wp-content/uploads/2009/09/name-of-the-file-1324x130.png

4

1 回答 1

0

(?!foo)是消极的展望。你正在寻找的背后(?<!foo)是一个消极的样子。

/http:\/\/url.com\/wp-content\/uploads\/\S+(?<!150x150)\.(?:jpg|jpeg|png|gif)/
                                            ^^^

正则表达式 101 演示

于 2013-08-28T14:31:02.530 回答