preg_grep

(PHP 4, PHP 5, PHP 7)

preg_grepВозвращает массив вхождений, которые соответствуют шаблону

Описание

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

Возвращает массив, состоящий из элементов входящего массива input, которые соответствуют заданному шаблону pattern.

Список параметров

pattern

Искомый шаблон, строка.

input

Входящий массив.

flags

В случае, если установлен в PREG_GREP_INVERT, функция preg_grep() возвращает те элементы массива, которые не соответствуют заданному шаблону pattern.

Возвращаемые значения

Возвращает массив, индексированный ключами из массива input.

Примеры

Пример #1 Пример использования preg_grep()

<?php
// Возвращает все элементы массива,
// содержащие числа с плавающей точкой
$fl_array preg_grep("/^(\d+)?\.\d+$/"$array);
?>

Смотрите также

Коментарии

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

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