1

次の正規表現を使用して、150x150 ピクセル以外の画像を指す wget ログからすべての画像 URL を取得しようとしています。

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 に答える