PHP preg_match的基本问题

时间:2013-09-04 16:56:31

标签: php regex preg-match

我在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()上使用$item_array时,我获得了一个空数组。由于preg_match与任何数组值都不匹配,我的印象就是问题就在那里,即使我用RegExr多次测试过它。

关于我可能出错的地方的任何想法?

1 个答案:

答案 0 :(得分:1)

尽可能see here (click),你的正则表达式正常。也许你有一个问题没有说明是否涉及使用结果。

我怀疑你可能正在寻找$ 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