preg_grep

(PHP 4, PHP 5)

preg_grepReturn array entries that match the pattern

Description

array preg_grep ( string $pattern , array $input [, int $flags = 0 ] )

Returns the array consisting of the elements of the input array that match the given pattern.

Parameters

pattern

The pattern to search for, as a string.

input

The input array.

flags

If set to PREG_GREP_INVERT, this function returns the elements of the input array that do not match the given pattern.

Return Values

Returns an array indexed using the keys from the input array.

Changelog

Version Description
4.2.0 The flags parameter was added.
4.0.4

Prior to this version, the returned array was indexed regardless of the keys of the input array.

If you want to reproduce this old behavior, use array_values() on the returned array to reindex the values.

Examples

Example #1 preg_grep() example

<?php
// return all array elements
// containing floating point numbers
$fl_array preg_grep("/^(\d+)?\.\d+$/"$array);
?>

See Also

Коментарии

Run a match on the array's keys rather than the values:

<?php

function preg_grep_keys$pattern$input$flags )
{
   
$keys preg_grep$patternarray_keys$input ), $flags );
   
$vals = array();
    foreach ( 
$keys as $key )
    {
       
$vals[$key] = $input[$key];
    }
    return 
$vals;
}

?>
2010-01-21 17:56:12
http://php5.kiev.ua/manual/ru/function.preg-grep.html
Автор:
A shorter way to run a match on the array's keys rather than the values:

<?php
function preg_grep_keys($pattern$input$flags 0) {
    return 
array_intersect_key($inputarray_flip(preg_grep($patternarray_keys($input), $flags)));
}
?>
2013-03-15 00:54:09
http://php5.kiev.ua/manual/ru/function.preg-grep.html
This may be obvious to most experienced developers,but just in case its not,when using preg_grep to check for whitelisted items ,one must be very careful to explicitly define the regex boundaries or it will fail
<?php
$whitelist 
= ["home","dashboard","profile","group"];
$possibleUserInputs = ["homd","hom","ashboard","settings","group"];
foreach(
$possibleUserInputs as  $input)
{
     if(
preg_grep("/$input/i",$whitelist)
    {
         echo 
$input." whitelisted";
    }else{
         echo 
$input." flawed";
    }

}
?>
This results in:

homd flawed
hom whitelisted
ashboard whitelisted
settings flawed
group whitelisted

I think this is because if boundaries are not explicitly defined,preg_grep looks for any instance of  the substring in the whole array and returns true if found.This is not what we want,so boundaries must be defined.

<?php
foreach($possibleUserInputs as  $input)
{
     if(
preg_grep("/^$input$/i",$whitelist)
    {
         echo 
$input." whitelisted";
    }else{
         echo 
$input." flawed";
    }

}
?>
this results in:
homd flawed
hom flawed
ashboard flawed
settings flawed
group whitelisted
in_array() will also give the latter results but will require few tweaks if say,the search is to be case insensitive,which is always the case 70% of the time
2018-06-24 11:24:08
http://php5.kiev.ua/manual/ru/function.preg-grep.html

    Поддержать сайт на родительском проекте КГБ