0

PHPに次の配列があります。

$item_array = array("facebook/1377445751.jpg_t","twitter/1377446022.gif_s","flickr/1377531219.png_w","flickr/1377531219.jpg_t_w");

この配列を反復処理して、次の正規表現に一致しない値を削除しています。

(facebook|twitter|flickr)\/(\d{10})\.(jpg|png|gif)_(t_w|t|s|w)

これが私のコードです:

foreach($item_array as $key => $item) { 
    if(!preg_match('/(facebook|twitter|flickr)\/(\d{10})\.(jpg|png|gif)_(t_w|t|s|w)/', $item)) {
        unset($item_array[$key]);
    }
}

ただし、次にvar_dump()onを使用する$item_arrayと、空の配列が得られます。はどの配列値とも一致しないため、preg_matchRegExr で何度もテストしたにもかかわらず、そこに問題があるという印象を受けました。

私が間違っている可能性がある場所についてのアイデアはありますか?

4

1 に答える 1

1

ここ (クリック) でわかるように、正規表現は正常に機能します。おそらく、結果の使用に関して言及していない問題が発生している可能性があります。

結果を保存する $matches パラメータを探しているのではないかと思います。

次のように使用します。

preg_match('/(facebook|twitter|flickr)\/(\d{10})\.(jpg|png|gif)_(t_w|t|s|w)/', $item, $matches);
var_dump($matches);

あなたが説明したように、これはすべて完全に機能しています。少し整理しましたが、コードは同じです。別の問題があるはずです。

$item_array = [
  "facebook/1377445751.jpg_t",
  "twitter/1377446022.gif_s",
  "flickr/1377531219.png_w",
  "flickr/1377531219.jpg_t_w",
  "other stuff that won't match!"
];
foreach($item_array as $key => $item) {
  $foo = preg_match('/(facebook|twitter|flickr)\/(\d{10})\.(jpg|png|gif)_(t_w|t|s|w)/', $item);
  if(!$foo) {
    echo $item; //displays "other stuff that won't match"
    unset($item_array[$key]);
  }
}
var_dump($item_array); //non match is removed
于 2013-09-04T17:01:07.827 に答える