CoderCruise

preg_filter

(PHP 5 >= 5.3.0, PHP 7)

preg_filterRealiza una búsqueda y sustitución de una expresión regular

Descripción

mixed preg_filter ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )

preg_filter() es idéntica a preg_replace() excepto que sólo devuelve los sujetos (posiblemente tranformados) donde hubo una coincidencia. Los detalles de cómo trabaja esta función se encuentra en la documentación de preg_replace().

Valores devueltos

Devuelve un array si el parámetro subject es un array, de lo contrario devuelve un string.

Si no se encontraron coincidencias u ocurrió un error, se devuelve un array vacío cuando subject es un array o NULL de otro modo.

Ejemplos

Ejemplo #1 Ejemplo comparando preg_filter() con preg_replace()

<?php
$sujeto 
= array('1''a''2''b''3''A''B''4'); 
$patrón = array('/\d/''/[a-z]/''/[1a]/'); 
$sustitución = array('A:$0''B:$0''C:$0'); 

echo 
"preg_filter devuelve\n";
print_r(preg_filter($patrón$sustitución$sujeto)); 

echo 
"preg_replace devuelve\n";
print_r(preg_replace($patrón$sustitución$sujeto)); 
?>

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

add a note add a note

User Contributed Notes 5 notes

up
3
sajina_99 at hotmail dot de
5 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 ;
     
    }
   
  }
?>
up
0
forsoap at gmail dot com
1 month 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
MrBertie
5 years ago
Another way to filter an array, and simply return the matching items: preg_grep!
up
-12
fgmhhfg at gmail dot com
2 years ago
As for the php 5.5.3 version, the example  turn out like:
Array
(
       [0] => A:1
       [1] => B:a
       ...
)
up
-12
Anonymous
2 years ago
As for the php 5.5.3 version, the example will turn out like:
Array
(
       [0]=>A:1
       [1]=>B:a
       ...
)
To Top