ConFoo 2025

preg_filter

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

preg_filterExecuta pesquisa e substituição usando expressões regulares

Descrição

preg_filter(
    string|array $pattern,
    string|array $replacement,
    string|array $subject,
    int $limit = -1,
    int &$count = null
): string|array|null

preg_filter() é idêntica a preg_replace() exceto que ela somente retorna strings de entrada (possivelmente transformadas) onde ocorreu uma correspondência. Para detalhes sobre como esta função trabalha, leia a documentação sobre preg_replace().

Parâmetros

Parâmetros estão descritos na documentação sobre preg_replace().

Valor Retornado

Retorna um array se o parâmetro subject for um array, ou uma string caso contrário.

Se nenhuma correspondência for encontrada ou se ocorrer um erro, um array vazio é retornado quando subject for um array ou null caso contrário.

Erros/Exceções

Se o padrão de expressão regular passado não for compilado para uma expressão regular válida, um E_WARNING será emitido.

Exemplos

Exemplo #1 Exemplo comparando preg_filter() com preg_replace()

<?php
$subject
= array('1', 'a', '2', 'b', '3', 'A', 'B', '4');
$pattern = array('/\d/', '/[a-z]/', '/[1a]/');
$replace = array('A:$0', 'B:$0', 'C:$0');

echo
"preg_filter retorna\n";
print_r(preg_filter($pattern, $replace, $subject));

echo
"preg_replace retorna\n";
print_r(preg_replace($pattern, $replace, $subject));
?>

O exemplo acima produzirá:

preg_filter retorna
Array
(
    [0] => A:C:1
    [1] => B:C:a
    [2] => A:2
    [3] => B:b
    [4] => A:3
    [7] => A:4
)
preg_replace retorna
Array
(
    [0] => A:C:1
    [1] => B:C:a
    [2] => A:2
    [3] => B:b
    [4] => A:3
    [5] => A
    [6] => B
    [7] => A:4
)

Veja Também

adicione uma nota

Notas Enviadas por Usuários (em inglês) 3 notes

up
10
forsoap at gmail dot com
8 years ago
For those who read manual not in English and figure out that example code returns not the same result as in documentation

You need put in example patter modifier "u" to get same result:

<?php
$subject
= array('1', 'а', '2', 'б', '3', 'А', 'Б', '4');
// Added "u"
$pattern = array('/\d/u', '/[а-я]/u', '/[1а]/u');
$replace = array('А:$0', 'Б:$0', 'В:$0');
?>
up
7
bienvenunet at yahoo dot com
7 years ago
If you don't want to actually replace the matches, just filter the array to them, make the replacement parameter '$0'.

<?php
$subject
= array('1', 'a', '2', 'b', '3', 'A', 'B', '4');
$result = preg_filter('/\d/', '$0', $subject); // ['1','2','3','4']
?>
up
3
sajina_99 at hotmail dot de
13 years ago
As I had to work with PHP5.2.X and needed preg_filter I wrote a quick and dirty workaround.

<?php
if (!function_exists('preg_filter')) {

function
preg_filter($pattern, $replace, $subject, $limit = -1 , &$count = null) {

if(!
is_array($subject)) {
$noArray = 1 ;
$subject = array($subject);
}

$preg = preg_replace($pattern, $replace, $subject, $limit, &$count);

$diff = array_diff($preg, $subject);

if(
$noArray == 1) $diff = implode($diff) ;

return
$diff ;

}

}
?>
To Top