(PHP 5 >= 5.3.0, PHP 7, PHP 8)
preg_filter — Búsqueda y reemplazo con una expresión regular
$pattern,$replacement,$subject,$limit = -1,&$count = 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() .
Los parámetros están descritos en la documentación de preg_replace() .
Devuelve un array si el parámetro subject
es de tipo array o una string en otro caso.
Si ninguna ocurrencia es encontrada o si ocurre un error,
un array vacío será devuelto cuando el parámetro
subject es un array o null en otro caso.
Si el patrón regex pasado no se compila a una regex válida, se emite una E_WARNING .
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 ejemplo anterior mostrará:
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 )
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ドル');
?>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']
?>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 ;
}
}
?>