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