preg_filter

関数の概要

PHPの preg_filter 関数は、正規表現にマッチする部分を置換した結果を取得する際に使用します。
ただし、マッチしなかった文字列は返されず、置換が行われた文字列だけを返すため、「正規表現に一致するものだけ置換結果を得たい」ケースに適しています。

パラメータの説明

  • pattern (string|string[]): 検索に用いる正規表現パターン。配列も可。
  • replacement (string|string[]): 置換後の文字列。patternが配列の場合は対応する配列で指定。
  • subject (string|string[]): 対象文字列もしくは文字列の配列。
  • limit (int, オプション): 置換の最大回数。デフォルトは -1、つまり無制限。
  • count (int, 参照渡し, オプション): 実際に置換された回数を格納する変数。

戻り値

置換が行われた文字列を返します。もし対象文字列に正規表現がマッチしなければ null が返されます。
配列を渡した場合は、置換が行われた文字列のみが含まれる配列が返されます。

使用例

基本的な使い方

$text = "apple banana orange";
$result = preg_filter('/banana/', 'grape', $text);
echo $result;  // 出力: apple grape orange

テキスト中の「banana」を「grape」に置換しています。対象文字列に「banana」があるため、置換結果が返されます。

マッチしなかった場合は null が返る

$text = "apple banana orange";
$result = preg_filter('/melon/', 'grape', $text);
var_dump($result);  // 出力: NULL

マッチしない正規表現で検索したため、置換がされず null が返ります。

配列で複数パターンを置換

$texts = ['one apple', 'two banana', 'three orange'];
$patterns = ['/apple/', '/banana/'];
$replacements = ['APPLE', 'BANANA'];

$results = preg_filter($patterns, $replacements, $texts);
print_r($results);
/* 出力:
Array
(
    [0] => one APPLE
    [1] => two BANANA
)
*/

複数の文字列に対してそれぞれの正規表現を適用し、置換が行われた文字列のみが返されます。
「three orange」はどのパターンにもマッチしないため結果に含まれません。

関連する関数

  • preg_replace: 正規表現を使って置換を行うが、マッチしなくても対象文字列を返す。
  • preg_match: 正規表現にマッチするか調べるだけの関数。
  • preg_replace_callback: 置換用の関数をコールバックで指定できる。

まとめ

preg_filter は、正規表現にマッチした文字列だけを置換結果として取得したい場合に便利な関数です。
マッチしなかった場合は null が返るため、置換が行われたかどうかを簡単に判定できます。
複数パターンや配列にも対応しているので、実務での部分的な置換処理に適しています。初心者の方もまずは preg_replace と併せて使い方を覚えておくと、PHPでの文字列操作の幅が広がります。