quotemeta

関数の概要

quotemeta は、PHPで文字列中の正規表現のメタ文字をエスケープするための関数です。正規表現を扱う際に、そのまま特殊文字を使うと意図しない動作をすることがあるため、対象の文字列に含まれるメタ文字をバックスラッシュ () でエスケープして安全に扱えるようにします。

パラメータの説明

  • string:エスケープ対象の文字列を指定します。

戻り値

渡された文字列内の正規表現メタ文字 (例えば .+*?[^]$(){}=!|:- など) に対してバックスラッシュでエスケープした新しい文字列を返します。

使用例

基本的な使い方

$pattern = 'example.+?*';
$escaped = quotemeta($pattern);
echo $escaped;  // example.+?*

ここでは文字列内の「.」「+」「?」「*」がそれぞれ「.」「+」「?」「*」とエスケープされ、正規表現の中でリテラルとして扱えるようになります。

ユーザー入力を正規表現に使う場合

$userInput = 'hello.world*';
$safeInput = quotemeta($userInput);
$regex = '/^' . $safeInput . '$/';
if (preg_match($regex, 'hello.world*')) {
    echo 'マッチしました';
}

ユーザーが入力した文字列をそのまま正規表現に使用すると誤動作を招きがちですが、quotemetaでエスケープすれば安全にマッチングが可能です。

ファイル名などのパターンマッチングに利用

$filename = 'data(backup)[2023].txt';
$escapedFilename = quotemeta($filename);
$pattern = '/^' . $escapedFilename . '$/';
if (preg_match($pattern, 'data(backup)[2023].txt')) {
    echo 'ファイル名が一致しました';
}

括弧やブラケットなどメタ文字を含むファイル名を正規表現のパターンとして利用するときに便利です。

関連する関数

  • preg_quote:正規表現用に文字列をエスケープする際によく使われる関数です。quotemetaと似ていますが、エスケープ対象の文字が若干異なり、より柔軟に使われます。
  • addcslashes:指定した文字をエスケープしますが、用途が正規表現に限定されません。
  • preg_match:正規表現のマッチングを行う関数で、quotemetaと組み合わせて使うことが多いです。

まとめ

quotemetaは、PHPの正規表現用文字列のメタ文字を安全にエスケープするためのシンプルな関数です。ユーザー入力や外部から取得した文字列を正規表現で扱う際に誤動作を防ぐのに役立ちます。正規表現でのパターン作成に安心感を与えるため、日常的な文字列操作やマッチング処理でぜひ活用しましょう。