CakeFest 2017 NYC, the Official CakePHP Conference

preg_filter

(PHP 5 >= 5.3.0)

preg_filterPerform a regular expression search and replace

Descrizione

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.

Valori restituiti

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.

Esempi

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)); 
?>

Il precedente esempio visualizzerà:

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
)

Vedere anche:

  • PCRE Patterns
  • preg_quote() - Inserisce il carattere di escape nei caratteri delle espressioni regolari
  • preg_replace() - Esegue una ricerca ed una sostituzione con le espressioni regolari
  • preg_replace_callback() - Esegue ricerche e sostituzioni con espressioni regolari usando il callback
  • preg_grep() - Restituisce una matrice degli elementi riconosciuti tramite le espressioni regolari
  • preg_last_error() - Returns the error code of the last PCRE regex execution

add a note add a note

User Contributed Notes 5 notes

up
6
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
4 months 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
6 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
-15
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