繁体   English   中英

正则表达式-不包含某些字符preg_match

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM