简体   繁体   中英

Regex - Does not contain certain Characters preg_match

I need a regex that match if the array contain certain it could anywhere for example, this array :

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
    )

I want to return all but the array that have the word stuff in it, and when i try to test with this it doesn't quite work :

return !preg_match('/(stuff)$/i', $element[0]);

any solution for that ?

Thanks

You don't need a regular expression for performing a simple search. Use array_filter() in conjunction with strpos() :

$result = array_filter($array, function ($elem) {
    return (strpos($elem[0], 'stuff') !== FALSE);
});

Now, to answer your question, your current regex pattern will only match strings that contain stuff at the end of the line . You don't want that, so get rid of the "end of the line" anchor $ from your regex.

The updated regex should look like below:

return !preg_match('/stuff/i', $element[0]);

If the actual use-case is different from what is shown in your question and if the operation involves more than just a simple pattern matching, then preg_match() is the right tool. As shown above, this can be used with array_filter() to create a new array that satisifes your requirements.

Here's how you'd do it with a callback function:

$result = array_filter($array, function ($elem) {
    return preg_match('/stuff/i', $elem[0]);
});

Note: The actual regex might be more complex - I've used /stuff/ as an example. Also, note that I've removed the negation !... from the statement.

Your pattern will only match a string where stuff appears at the end of the string or line. To fix this, just get rid of the end anchor ( $ ):

return !preg_match('/stuff/i', $element[0]);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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