PHP 8.5.0 Alpha 1 available for testing

preg_filter

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

preg_filterBúsqueda y reemplazo con una expresión regular

Descripción

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

preg_filter() es idéntica a preg_replace(), pero solo devuelve las ocurrencias encontradas (eventualmente transformadas). Para más detalles sobre el funcionamiento de esta función, véase preg_replace().

Parámetros

Los parámetros están descritos en la documentación de preg_replace().

Valores devueltos

Devuelve un tableau si el parámetro subject es de tipo tableau o una chaîne de caractères en otro caso.

Si ninguna ocurrencia es encontrada o si ocurre un error, un tableau vacío será devuelto cuando el parámetro subject es un tableau o null en otro caso.

Errores/Excepciones

If the regex pattern passed does not compile to a valid regex, an E_WARNING is emitted.

Ejemplos

Ejemplo #1 Ejemplo de comparación de preg_filter() con 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 devuelve\n";
print_r(preg_filter($pattern, $replace, $subject));

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

El resultado del ejemplo sería:

preg_filter devuelve
Array
(
    [0] => A:C:1
    [1] => B:C:a
    [2] => A:2
    [3] => B:b
    [4] => A:3
    [7] => A:4
)
preg_replace devuelve
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
)

Ver también

  • Los Patrones PCRE
  • preg_quote() - Protección de caracteres especiales de expresiones regulares
  • preg_replace() - Buscar y reemplazar mediante expresión regular estándar
  • preg_replace_callback() - Buscar y reemplazar mediante expresión regular estándar utilizando una función de retrollamada
  • preg_grep() - Devuelve un array con los resultados de la búsqueda
  • preg_last_error() - Devuelve el código de error de la última expresión PCRE ejecutada

add a note

User Contributed Notes 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