preg_quote

関数の概要

preg_quoteは、PHPの正規表現で特殊な意味を持つ文字を、自動的にエスケープ(無効化)してくれる関数です。ユーザーが入力した文字列を正規表現のパターンの一部として安全に扱いたい場合に役立ちます。これにより、意図しないマッチやエラーを防ぐことができます。

パラメータの説明

  • string(必須):エスケープ対象の文字列を指定します。
  • delimiter(省略可能):正規表現の区切り文字を指定します。この文字もエスケープ対象になります。指定しない場合は区切り文字として扱いません。

戻り値

エスケープされた文字列を返します。特殊文字はバックスラッシュ()でエスケープされているため、そのまま正規表現のパターンに使用できます。

使用例

基本的な使い方

<?php
$input = "hello.world";
$escaped = preg_quote($input);
echo $escaped; // 出力: hello.world
?>

この例では、「.」が正規表現の任意1文字を意味しますが、preg_quoteでバックスラッシュが付いて無効化されます。

区切り文字を指定した例

<?php
$input = "hello/world";
$escaped = preg_quote($input, '/');
echo $escaped; // 出力: hello/world
?>

正規表現の区切り文字が「/」の場合、そのスラッシュもエスケープされます。これにより、パターンの区切りと誤認識されません。

ユーザー入力を正規表現に安全に含める例

<?php
$userInput = 'abc+def?';
$pattern = "/^" . preg_quote($userInput, '/') . "$/";
if (preg_match($pattern, 'abc+def?')) {
    echo "マッチしました";
} else {
    echo "マッチしませんでした";
}
?>

ユーザーが入力した特殊文字(+、?など)も安全にパターンに含められ、文字通りの一致を判定できます。

関連する関数

  • preg_match — 正規表現によるパターンマッチングを実施する関数
  • preg_replace — 正規表現による文字列置換を行う関数
  • addcslashes — 文字列の特定文字にバックスラッシュを付ける関数(preg_quoteと用途や挙動が異なります)

まとめ

preg_quoteは、正規表現における特殊文字を安全に扱いたいときに非常に便利な関数です。ユーザーの入力や外部データを正規表現に組み込む場合は、preg_quoteで適切にエスケープしておくことで、予期せぬマッチやエラーを防止できます。PHPで正規表現を使う際の基本的かつ重要なツールとして覚えておきましょう。