PHP 7.1.0 Released

preg_filter

(PHP 5 >= 5.3.0, PHP 7)

preg_filter正規表現による検索と置換を行う

説明

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

preg_filter()preg_replace() と似ていますが、マッチした結果 (を変換したもの) のみを返します。 この関数の挙動の詳細については preg_replace() のドキュメントを参照ください。

返り値

subject が配列の場合は配列を、それ以外の場合は文字列を返します。

マッチする結果が見つからなかったりエラーが発生したりした場合は、 subjectarray なら空の配列を返し、そうでなければ NULL を返します。

例1 preg_filter()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)); 
?>

上の例の出力は以下となります。

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
)

参考

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