preg_filter
(PHP 5 >= 5.3.0, PHP 7, PHP 8)
preg_filter — 正規表現による検索と置換を行う
説明
preg_filter(
string|array
string|array
string|array
int
int
): string|array|null
string|array
$pattern
,string|array
$replacement
,string|array
$subject
,int
$limit
= -1,int
&$count
= null
): string|array|null
preg_filter() は preg_replace() と似ていますが、マッチした結果 (を変換したもの) のみを返します。 この関数の挙動の詳細については preg_replace() のドキュメントを参照ください。
パラメータ
引数の説明は、 preg_replace() にあります。
戻り値
subject
が配列の場合は配列を、それ以外の場合は文字列を返します。
マッチする結果が見つからなかったりエラーが発生したりした場合は、
subject
が array なら空の配列を返し、そうでなければ
null
を返します。
エラー / 例外
渡された正規表現のパターンがコンパイルできない場合、E_WARNING
が発生します。
例
例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 )
参考
- PCRE のパターン
- preg_quote() - 正規表現文字をクオートする
- preg_replace() - 正規表現検索および置換を行う
- preg_replace_callback() - 正規表現検索を行い、コールバック関数を使用して置換を行う
- preg_grep() - パターンにマッチする配列の要素を返す
- preg_last_error() - 直近の PCRE 正規表現処理のエラーコードを返す
+add a note
User Contributed Notes 3 notes
forsoap at gmail dot com ¶
8 years 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');
?>
bienvenunet at yahoo dot com ¶
7 years ago
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']
?>
sajina_99 at hotmail dot de ¶
13 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 ;
}
}
?>
↑ and ↓ to navigate •
Enter to select •
Esc to close
Press Enter without
selection to search using Google