簡體   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