我在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多次测试过它。
关于我可能出错的地方的任何想法?
答案 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