[英]Regex - Does not contain certain Characters preg_match
我需要一个匹配的正则表达式,如果数组包含肯定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]);
有什么解决办法吗?
谢谢
您不需要正则表达式即可执行简单的搜索。 将array_filter()
与strpos()
结合使用:
$result = array_filter($array, function ($elem) {
return (strpos($elem[0], 'stuff') !== FALSE);
});
现在,要回答您的问题,您当前的regex模式将只匹配该行末尾包含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/
为例。 另外,请注意,我已从语句中删除了否定!...
。
您的模式将仅匹配在字符串或行的末尾出现stuff
的字符串。 要解决此问题,只需除去结尾锚点( $
):
return !preg_match('/stuff/i', $element[0]);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.