preg_filter

(PHP 5 >= 5.3.0)

preg_filterPerform a regular expression search and replace

Description

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

preg_filter() is identical to preg_replace() except it only returns the (possibly transformed) subjects where there was a match. For details about how this function works, read the preg_replace() documentation.

Return Values

Returns an array if the subject parameter is an array, or a string otherwise.

If no matches are found or an error occurred, an empty array is returned when subject is an array or NULL otherwise.

Examples

Example #1 Example comparing preg_filter() with 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 returns\n";
print_r(preg_filter($pattern$replace$subject)); 

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

The above example will output:

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

See Also

Коментарии

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 = -, &$count null) {
   
      if(!
is_array($subject)) {
       
$noArray ;
       
$subject = array($subject);
      }

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

     
$diff array_diff($preg$subject);
     
      if(
$noArray == 1$diff implode($diff) ;

      return 
$diff ;
     
    }
   
  }
?>
2011-09-25 10:07:08
http://php5.kiev.ua/manual/ru/function.preg-filter.html
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');
?>
2016-10-20 16:14:03
http://php5.kiev.ua/manual/ru/function.preg-filter.html
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']
?>
2017-10-28 00:10:24
http://php5.kiev.ua/manual/ru/function.preg-filter.html

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