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_match不匹配任何数组值,我的印象是问题出在那儿,即使我已经用 RegExr 对其进行了多次测试。

关于我可能出错的地方有什么想法吗?

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 回答