如果数组包含某些it could anywhere
,我需要一个匹配的正则表达式,例如,这个数组:
Array
(
[1] => Array
(
[0] => http://www.test1.com
[1] => 4
[2] => 4
)
[2] => Array
(
[0] => http://www.test2.fr/blabla.html
[1] => 2
[2] => 2
)
[3] => Array
(
[0] => http://www.stuff.com/admin/index.php
[1] => 2
[2] => 2
)
[4] => Array
(
[0] => http://www.test3.com/blabla/bla.html
[1] => 2
[2] => 2
)
[5] => Array
(
[0] => http://www.stuff.com/bla.html
[1] => 2
[2] => 2
)
我想要返回除了包含单词stuff
的数组之外的所有数组,当我尝试使用它进行测试时,它不能正常工作:
return !preg_match('/(stuff)$/i', $element[0]);
任何解决方案?
由于
答案 0 :(得分:2)
您不需要正则表达式来执行简单搜索。将array_filter()
与strpos()
结合使用:
$result = array_filter($array, function ($elem) {
return (strpos($elem[0], 'stuff') !== FALSE);
});
现在,要回答您的问题,您当前的正则表达式模式只会匹配行处包含stuff
的字符串。你不希望这样,所以摆脱你的正则表达式中的“行尾”$
。
更新的正则表达式应如下所示:
return !preg_match('/stuff/i', $element[0]);
如果实际用例与您的问题中显示的不同,并且操作涉及的不仅仅是简单的模式匹配,那么preg_match()
是正确的工具。如上所示,这可以与array_filter()
一起使用,以创建满足您要求的新阵列。
以下是使用回调函数的方法:
$result = array_filter($array, function ($elem) {
return preg_match('/stuff/i', $elem[0]);
});
注意:实际的正则表达式可能更复杂 - 我以/stuff/
为例。另请注意,我已从声明中删除了否定!...
。
答案 1 :(得分:1)
您的模式只会匹配字符串或行末尾出现stuff
的字符串。要解决这个问题,只需删除结束锚($
):
return !preg_match('/stuff/i', $element[0]);