【PHP8.x】preg_quote()関数の使い方
preg_quote関数の使い方について、初心者にもわかりやすく解説します。
基本的な使い方
preg_quote関数は、正規表現パターン中で特別な意味を持つ文字をエスケープする処理を実行する関数です。
主に、ユーザーからの入力など、動的に生成される文字列を正規表現のパターンの一部として安全に利用したい場合に役立ちます。正規表現には、.(任意の1文字)、*(直前の文字の0回以上の繰り返し)、+(直前の文字の1回以上の繰り返し)、?(直前の文字の0回または1回の繰り返し)、^(行頭)、$(行末)、[、]、{、}、(、)、\、|といった、特別な意味を持つ文字が存在します。これらの特殊文字を、正規表現の構文の一部としてではなく、単なる文字として検索したい場合、それらの文字の前にバックスラッシュ\を付けてエスケープする必要があります。
preg_quote関数は、指定された文字列の中から上記のような特殊文字を自動的に探し出し、それらの文字の前に\を追加することで、エスケープ処理を効率的に行います。例えば、「.test」という文字列を検索したい場合、そのまま正規表現パターンに組み込むと.が任意の文字として解釈されてしまいますが、preg_quote関数を通すことで「\.test」のように変換され、意図した通りの検索が可能になります。
さらに、正規表現パターンを囲むデリミタ文字(例えば/や#など)がパターン内に含まれる場合もエスケープが必要となります。本関数の第二引数にそのデリミタ文字を指定することで、このデリミタ文字も同時にエスケープさせることができます。この関数を利用することで、意図しない正規表現の解釈を防ぎ、より安全で堅牢なコードを記述できるようになります。
構文(syntax)
1<?php 2// エスケープしたい文字列 3$stringToEscape = "これは正規表現の特殊文字 . を含む文字列です。$や[]も含まれます。"; 4 5// オプションのデリミタ。正規表現のパターンでこの文字をデリミタとして使う場合に指定すると、 6// $stringToEscape 内に含まれるこのデリミタ文字もエスケープされる。 7// 例えば、正規表現のデリミタが '/' の場合: 8$regexDelimiter = '/'; 9 10// preg_quote() 関数は、文字列内の正規表現の特殊文字をエスケープする。 11// 第1引数: エスケープする文字列 12// 第2引数: (オプション) 正規表現のデリミタ。この文字もエスケープされる。 13$escapedString = preg_quote($stringToEscape, $regexDelimiter); 14 15// $escapedString の例: "これは正規表現の特殊文字 \. を含む文字列です\。\$や\[\]も含まれます。" 16// この結果は、正規表現パターンの一部として安全に利用できる。 17?>
引数(parameters)
string $str, ?string $delimiter = null
- string $str: クォート(エスケープ)する対象の文字列
- ?string $delimiter = null: パターンで使用される区切り文字を指定します。指定された場合、その文字もエスケープされます
戻り値(return)
string
指定された文字列中の正規表現で特別な意味を持つ文字をエスケープした新しい文字列を返します。
サンプルコード
PHP preg_quoteで安全に正規表現を扱う
1<?php 2 3/** 4 * preg_quote関数の基本的な使用方法を示すサンプルコード。 5 * 6 * この関数は、特定の文字列に含まれる正規表現の特殊文字をエスケープし、 7 * その文字列をpreg_replaceなどの正規表現関数で安全にリテラルな検索パターンとして 8 * 使用できるようにします。 9 * 10 * キーワード: php preg_replace double quotes 11 * この例では、検索対象の文字列に正規表現の特殊文字とダブルクォートが含まれている場合でも、 12 * preg_quoteがどのように機能するかを示します。 13 */ 14function demonstratePregQuote(): void 15{ 16 // 検索対象となる元のテキスト 17 $text = "現在の価格は $5.00 (税別) です。特別な記号 *、+、?、[]、そして \"引用符\" も含まれます。"; 18 19 // ユーザー入力など、リテラルとして検索したい文字列。 20 // 正規表現の特殊文字 ($ . * + ? [] () \) とダブルクォートを含む。 21 $searchString = "$5.00 (税別) です。特別な記号 *、+、?、[]、そして \"引用符\" も含まれます。"; 22 23 // 検索文字列がマッチした場合に置換される文字列 24 $replacementString = '【情報置換済み】'; 25 26 echo "--- 元のテキスト ---\n"; 27 echo $text . "\n\n"; 28 29 echo "--- 検索したい文字列 (リテラルとして扱いたい) ---\n"; 30 echo $searchString . "\n\n"; 31 32 // --- 1. preg_quoteを使用しない場合 (誤った動作やエラーの原因となる可能性) --- 33 echo "--- preg_quote を使用しない場合 ---\n"; 34 try { 35 // $searchString には正規表現の特殊文字が含まれているため、 36 // そのまま正規表現パターンとして使用すると、意図しないマッチングが発生したり、 37 // PHP 8 以降では無効なパターンとして `ValueError` を含むエラーが発生したりする可能性があります。 38 // 例: $ は行末にマッチ、. は任意の一文字、*+? は繰り返し、[]() はグループ化や文字クラス。 39 $patternWithoutQuote = $searchString; 40 echo "正規表現パターン (未エスケープ): /" . $patternWithoutQuote . "/\n"; 41 42 // この行は、上記の理由によりエラーが発生する可能性が高いため、try-catchで囲んでいます。 43 // PHP 8.0以降では、無効なPCREパターンはValueErrorをスローします。 44 $resultWithoutQuote = preg_replace('/' . $patternWithoutQuote . '/', $replacementString, $text); 45 46 echo "結果 (期待通りに動作しない可能性が高い、またはエラー):\n"; 47 echo $resultWithoutQuote . "\n\n"; 48 } catch (ValueError $e) { 49 echo "エラーが発生しました: " . $e->getMessage() . "\n"; 50 echo "理由: 検索文字列に正規表現の特殊文字が含まれているため、パターンとして無効です。\n\n"; 51 } catch (Throwable $e) { 52 echo "予期せぬエラーが発生しました: " . $e->getMessage() . "\n\n"; 53 } 54 55 // --- 2. preg_quoteを使用する場合 (安全にリテラル検索を行う推奨される方法) --- 56 echo "--- preg_quote を使用する場合 ---\n"; 57 58 // preg_quote を使用して $searchString 内の正規表現特殊文字をエスケープします。 59 // 第二引数には、preg_replaceで使用する正規表現デリミタ(この例では '/')を指定します。 60 // これにより、$searchString内にデリミタ文字が含まれていても安全にエスケープされます。 61 // 62 // 注意: ダブルクォート (") は正規表現の特殊文字ではないため、preg_quoteではエスケープされません。 63 // しかし、文字列の一部として正しく扱われ、リテラルにマッチします。 64 $quotedSearchString = preg_quote($searchString, '/'); 65 66 echo "preg_quoteでエスケープされたパターン:\n"; 67 echo $quotedSearchString . "\n\n"; 68 69 // エスケープされたパターンを使用して置換を行います。 70 // これにより、$searchStringが完全にリテラルな文字列として扱われ、 71 // 予期せぬ正規表現の挙動を防ぎ、安全かつ正確な置換が実現します。 72 $resultWithQuote = preg_replace('/' . $quotedSearchString . '/', $replacementString, $text); 73 74 echo "結果 (安全にリテラル検索を実行):\n"; 75 echo $resultWithQuote . "\n"; 76} 77 78// 関数の実行 79demonstratePregQuote(); 80 81?>
PHPのpreg_quote関数は、文字列に含まれる正規表現の特殊文字をエスケープし、その文字列をpreg_replaceなどの正規表現関数で安全にリテラルな検索パターンとして使用できるようにします。システムエンジニアが、ユーザー入力など意図しない正規表現の挙動を防ぎたい場合に非常に役立つ機能です。
この関数は、エスケープしたい元の文字列をstring $strとして受け取ります。オプションの?string $delimiter引数に、preg_replaceなどで使用する正規表現デリミタを指定すると、そのデリミタ文字もエスケープされます。これにより、デリミタ文字が検索文字列に含まれていても安全に扱えます。処理された結果は、特殊文字がエスケープされたstring型の文字列として返されます。
サンプルコードでは、$5.00 (税別) です。特別な記号 *、+、?、[]、そして "引用符" も含まれます。のような複雑な文字列をリテラルに検索し置換する例を示しています。preg_quoteを使用しない場合、$や*といった正規表現特殊文字がパターンとして誤解釈され、PHP 8以降ではValueErrorが発生する可能性があります。一方、preg_quoteで事前にエスケープすることで、これらの特殊文字がただの文字として扱われ、preg_replace関数で意図したとおりに文字列全体を正確に検索し、安全に置換できるようになります。なお、キーワードにある「ダブルクォート(")」は正規表現の特殊文字ではないためpreg_quoteではエスケープされませんが、リテラルの一部として正しく認識され、問題なくマッチします。
preg_quoteは、正規表現の特殊文字をエスケープし、文字列をリテラルとして安全に扱うための関数です。これを使わずに正規表現特殊文字を含む文字列をパターンにすると、意図しない結果になったり、PHP 8以降ではValueErrorが発生したりする可能性があります。第二引数には、preg_replaceなどで使う正規表現デリミタを指定することで、デリミタ自体が検索文字列に含まれていても安全に処理できます。ダブルクォートは正規表現の特殊文字ではないためpreg_quoteではエスケープされませんが、リテラル文字列の一部として正しくマッチします。ユーザーからの入力など、動的な文字列を正規表現パターンとして利用する際は、必ずpreg_quoteでエスケープして安全性を確保してください。
preg_quoteで正規表現を安全に置換する
1<?php 2 3/** 4 * preg_quote を使用して、ユーザー入力文字列を正規表現パターンとして安全にエスケープし、 5 * preg_replace で置換する例。 6 * 7 * システムエンジニアを目指す初心者向けに、正規表現の特殊文字を含む文字列を 8 * 安全に検索・置換する方法を示します。 9 */ 10 11// ユーザーから入力された可能性のある検索文字列と仮定します。 12// この文字列には、正規表現で特殊な意味を持つ文字(例: . * ? / など)が含まれています。 13$userSearchTerm = '.(example)*string?/path'; 14 15// 検索および置換の対象となるテキスト 16$targetText = 'This is an example text containing .(example)*string?/path for demonstration. ' . 17 'We want to replace this specific phrase.'; 18 19// 置換したい新しい文字列 20$replaceWith = '[REPLACED_SECRET_INFO]'; 21 22echo "元の検索文字列 (ユーザー入力): " . $userSearchTerm . PHP_EOL; 23echo "対象テキスト: " . $targetText . PHP_EOL . PHP_EOL; 24 25// preg_quote 関数を使って、$userSearchTerm 内の正規表現特殊文字をエスケープします。 26// 第二引数に正規表現のデリミタ(ここではスラッシュ '/') を指定することで、 27// 検索文字列自体にデリミタ文字が含まれていても、それがエスケープされ、 28// preg_replace のパターンが壊れるのを防ぎます。 29$escapedPattern = preg_quote($userSearchTerm, '/'); 30 31echo "エスケープ後の正規表現パターン: /" . $escapedPattern . "/" . PHP_EOL . PHP_EOL; 32 33// エスケープされたパターンを preg_replace の第一引数として使用し、置換を実行します。 34// パターンはデリミタで囲む必要があります。 35$replacedText = preg_replace('/' . $escapedPattern . '/', $replaceWith, $targetText); 36 37echo "置換後のテキスト: " . $replacedText . PHP_EOL; 38 39?>
preg_quote関数は、文字列に含まれる正規表現の特殊文字をエスケープするために使用されるPHPの関数です。システムエンジニアを目指す初心者の方にとって、ユーザー入力など、意図しない正規表現の動作を防ぎ、安全に文字列を正規表現パターンとして扱えるようにする重要な役割を持ちます。
この関数は二つの引数を取ります。一つ目の$strには、エスケープしたい元の文字列を指定します。二つ目の$delimiterはオプションの引数で、正規表現のデリミタ(区切り文字、例えばスラッシュ/など)を指定できます。このデリミタを指定することで、元の文字列にデリミタ文字自体が含まれていても、それがエスケープされて正規表現パターンが壊れるのを防ぐことができます。戻り値としては、特殊文字がエスケープされた新しい文字列が返されます。
サンプルコードでは、ユーザーから入力された可能性のある検索文字列に、ピリオド.やアスタリスク*、クエスチョンマーク?、スラッシュ/といった正規表現の特殊文字が含まれています。これらの文字をそのままpreg_replaceなどの正規表現関数に渡すと、意図しないマッチングやエラーが発生する可能性があります。そこでpreg_quote関数を使い、検索文字列を正規表現として安全に扱えるようエスケープします。特に、正規表現のデリミタとして指定したスラッシュ/を第二引数に渡すことで、検索文字列中のスラッシュも適切にエスケープされ、パターンが正しく構築されます。これにより生成された安全なパターンをpreg_replaceに適用することで、特殊文字も含め、指定した文字列と完全に一致する箇所のみを正確に検索し、置換することが可能になります。これは、システムの安定性とセキュリティを保つ上で非常に重要な処理です。
preg_quote関数は、ユーザー入力などの文字列を正規表現の「特殊文字」としてではなく、「そのままの文字」として扱いたい場合に必須です。
特に重要なのは、第二引数にpreg_replaceなどで使用する正規表現のデリミタ(例: /)を必ず指定することです。これを指定しないと、検索文字列内にデリミタ文字が含まれていた場合、正規表現パターンが不正になり、意図しないエラーやセキュリティ問題につながる可能性があります。
preg_quoteでエスケープされた文字列は、あくまでパターンの一部であり、最終的にpreg_replaceなどに渡す際には、必ずデリミタで囲む必要があります。この手順により、安全で正確な正規表現マッチングが実現でき、ユーザー入力を含む文字列を安全に扱うことが可能になります。
preg_quoteで正規表現を安全にする
1<?php 2 3/** 4 * preg_quote関数を使用して、動的な文字列を正規表現パターンとして安全にエスケープする例。 5 * この関数は、ユーザーが提供する文字列を正規表現の検索パターンとして使用する際に、 6 * 文字列に含まれる正規表現の特殊文字を適切にエスケープし、意図しないマッチを防ぎます。 7 */ 8function demonstratePregQuoteUsage(): void 9{ 10 // ユーザーが入力した、検索したい文字列を想定しています。 11 // この文字列には、正規表現の特殊文字である '$' (行末) や '.' (任意の1文字) と、 12 // キーワードにあるシングルクォート(')が含まれています。 13 $userProvidedSearchTerm = "$20 or 'free' items."; 14 15 // 検索語がマッチした場合に置換される文字列 16 $replacementText = "discounted items"; 17 18 // 検索と置換の対象となる元の文章 19 $originalText = "We offer great deals like $20 or 'free' items. Don't miss out!"; 20 21 // preg_quote を使用して、ユーザー提供の検索語を正規表現パターンとして安全にエスケープします。 22 // - '$' と '.' は正規表現の特殊文字であるため、エスケープされます(例: \$20 or \'free\' items\.)。 23 // - シングルクォート ('') は正規表現の特殊文字ではないため、エスケープされません。 24 // - 第2引数でデリミタ '/' を指定することで、もし $userProvidedSearchTerm に '/' が含まれる場合もエスケープされます。 25 $escapedPattern = '/' . preg_quote($userProvidedSearchTerm, '/') . '/'; 26 27 // preg_replace を使用して、エスケープされたパターンで文字列を置換します。 28 // これにより、$userProvidedSearchTerm が正規表現ではなく、リテラル文字列として正確に検索されます。 29 $modifiedText = preg_replace($escapedPattern, $replacementText, $originalText); 30 31 echo "元の文章: " . $originalText . "\n"; 32 echo "ユーザーが提供した検索語: " . $userProvidedSearchTerm . "\n"; 33 echo "検索パターン (preg_quoteでエスケープ後): " . $escapedPattern . "\n"; 34 echo "置換後の文章: " . $modifiedText . "\n"; 35} 36 37// 上記の関数を実行して、preg_quoteの動作を確認します。 38demonstratePregQuoteUsage(); 39
PHPのpreg_quote関数は、正規表現のパターンとして使用する文字列に含まれる特殊文字をエスケープするために利用されます。これにより、文字列を正規表現の特殊な意味ではなく、文字通りに(リテラルとして)安全に扱えるようになり、意図しないマッチングや予期せぬ挙動を防ぎます。
この関数は2つの引数を取ります。1つ目の$strはエスケープしたい元の文字列で、必須です。2つ目の$delimiterはオプションで、正規表現のデリミタ文字を指定します。このデリミタを指定すると、元の文字列内にデリミタ文字が含まれていても、それもエスケープの対象となります。関数は、特殊文字がエスケープされた新しい文字列を戻り値として返します。
サンプルコードでは、ユーザーが入力した"$20 or 'free' items."という文字列を、preg_replaceで安全に検索パターンとして利用する例を示しています。preg_quoteを通すことで、$や.のような正規表現の特殊文字は自動的にバックスラッシュ\でエスケープされます(例: \$20 or 'free' items\.)。シングルクォート'は正規表現の特殊文字ではないため、エスケープされません。デリミタとして/を指定しているため、もし元の文字列に/が含まれていてもエスケープされます。これにより、動的な文字列を正規表現パターンとして使用する際のセキュリティと正確性が向上し、期待通りの検索と置換が可能となります。
preg_quote関数は、ユーザー入力などの動的な文字列を正規表現パターン内でリテラルとして安全に扱うために利用します。正規表現の特殊文字(例: $, .など)をエスケープすることで、意図しないマッチや誤作動を防ぎます。特にpreg_replaceなどと組み合わせる際は、preg_quoteの第二引数に、正規表現で使用するデリミタ(例: /)を必ず指定してください。これにより、検索文字列中にデリミタが含まれていても適切にエスケープされ、正規表現パターンが破損するのを防げます。キーワードにあるシングルクォート(')は正規表現の特殊文字ではないため、preg_quoteではエスケープされない点にご留意ください。
PHP preg_quote関数で正規表現を安全に使う
1<?php 2 3/** 4 * preg_quote関数の使用例を示す。 5 * 6 * この関数は、文字列に含まれる正規表現の特殊文字をエスケープし、 7 * その文字列を正規表現パターンの一部として安全に利用できるようにします。 8 * システムエンジニアとして正規表現を扱う際には必須の関数です。 9 */ 10function demonstratePregQuoteUsage(): void 11{ 12 // ---------------------------------------------------- 13 // 1. デリミタを指定しない場合の基本的な使用例 14 // 正規表現の特殊文字 (例: ., $, ?, +, *) をエスケープします。 15 // ---------------------------------------------------- 16 $originalString1 = '検索したい $変数.txt?'; 17 echo "元の文字列 (1): " . $originalString1 . "\n"; 18 19 // preg_quoteを使って特殊文字をエスケープ 20 $escapedString1 = preg_quote($originalString1); 21 echo "エスケープ後 (1): " . $escapedString1 . "\n"; 22 23 // エスケープされた文字列を使って正規表現パターンを作成し、マッチングを試みる 24 $pattern1 = '/' . $escapedString1 . '/'; 25 $targetText1 = "これは $originalString1 というファイルを参照しています。"; 26 27 if (preg_match($pattern1, $targetText1)) { 28 echo "パターン \"" . $pattern1 . "\" はテキストにマッチしました。\n"; 29 } else { 30 echo "パターンはテキストにマッチしませんでした。\n"; 31 } 32 echo "----------------------------------------\n"; 33 34 // ---------------------------------------------------- 35 // 2. デリミタを指定する場合の使用例 (推奨) 36 // 正規表現パターンで使うデリミタ文字が検索文字列に含まれる場合に、 37 // そのデリミタ文字もエスケープ対象にするために指定します。 38 // ---------------------------------------------------- 39 $originalString2 = '/path/to/some/file.php'; 40 $delimiter = '#'; // 正規表現パターンでデリミタとして使う文字 41 echo "元の文字列 (2): " . $originalString2 . "\n"; 42 echo "正規表現のデリミタ: '" . $delimiter . "'\n"; 43 44 // preg_quoteにデリミタを指定してエスケープ 45 $escapedString2 = preg_quote($originalString2, $delimiter); 46 echo "エスケープ後 (2): " . $escapedString2 . "\n"; 47 48 // エスケープされた文字列と指定したデリミタを使って正規表現パターンを作成 49 $pattern2 = $delimiter . $escapedString2 . $delimiter; 50 $targetText2 = "参照パスは " . $originalString2 . " です。"; 51 52 if (preg_match($pattern2, $targetText2)) { 53 echo "パターン \"" . $pattern2 . "\" はテキストにマッチしました。\n"; 54 } else { 55 echo "パターンはテキストにマッチしませんでした。\n"; 56 } 57 echo "----------------------------------------\n"; 58 59 // ---------------------------------------------------- 60 // 3. (重要) デリミタを指定すべき状況で指定しなかった場合の注意点 61 // 正規表現のデリミタ文字が検索文字列に含まれるのに、 62 // preg_quoteにデリミタを指定しないと問題が発生する可能性があります。 63 // ---------------------------------------------------- 64 $originalString3 = '/users/data/report.csv'; 65 $problematicDelimiter = '/'; // 正規表現で一般的に使われるデリミタ 66 echo "元の文字列 (3 - 問題例): " . $originalString3 . "\n"; 67 echo "正規表現のデリミタ: '" . $problematicDelimiter . "'\n"; 68 69 // **デリミタを指定せずにエスケープ** 70 $problematicEscapedString = preg_quote($originalString3); 71 echo "デリミタなしでエスケープ後: " . $problematicEscapedString . "\n"; 72 73 // この文字列でパターンを作成すると、例えば '/' . '/users/data/report.csv' . '/' は 74 // '//users/data/report.csv//' となり、'//' が正規表現として「空文字列にマッチ」という 75 // 意図しない意味を持つ可能性があります。 76 $problematicPattern = $problematicDelimiter . $problematicEscapedString . $problematicDelimiter; 77 echo "生成される可能性のある誤ったパターン: \"" . $problematicPattern . "\"\n"; 78 echo "-> 注意: この場合、正規表現のデリミタ ('/') が元の文字列に含まれているため、\n"; 79 echo " `preg_quote()` にデリミタを渡さなかったことにより、正規表現として不正な意味を持つ可能性があります。\n"; 80 echo " 安全のため、正規表現のデリミタが文字列に含まれる可能性があれば、必ず第2引数にデリミタを指定しましょう。\n"; 81} 82 83// サンプル関数を実行 84demonstratePregQuoteUsage();
PHPのpreg_quote関数は、文字列に含まれる正規表現の特殊文字をエスケープするために使用されます。これにより、任意の文字列を正規表現パターンの一部として安全に組み込むことが可能になり、システムエンジニアがユーザー入力などを検索パターンに組み込む際に非常に重要です。
第一引数$strには、エスケープしたい元の文字列を指定します。この関数は、正規表現で特別な意味を持つ文字(例:.、$、*、?、+など)の前にバックスラッシュ(\)を追加して無効化します。
第二引数$delimiterはオプションで、正規表現パターンのデリミタとして使用する文字を指定します。この引数を指定すると、preg_quote関数は、指定されたデリミタ文字もエスケープ対象とします。例えば、正規表現パターンを/.../のようにスラッシュで囲む場合、文字列内にスラッシュが含まれていると、それが正規表現のデリミタと誤解され、意図しないパターンになる可能性があります。このような場合にデリミタとして'/'を指定することで、文字列内のスラッシュも安全にエスケープされ、予期せぬエラーや挙動を防ぐことができます。安全な正規表現を構築する上で、デリミタの適切な指定は非常に重要です。
戻り値は、特殊文字が適切にエスケープされた新しい文字列です。
サンプルコードでは、まずデリミタを指定しない基本的なエスケープ例を示し、文字列が正しくマッチすることを確認しています。次に、デリミタに#を指定してパス文字列をエスケープする例があり、文字列に含まれるデリミタも安全に処理できることが分かります。特に、正規表現のデリミタがエスケープ対象の文字列に含まれる可能性がある場合には、必ず第二引数としてデリミタを指定することが推奨されます。これを怠ると、生成される正規表現が構文エラーになったり、意図しないマッチングを引き起こす可能性があるため注意が必要です。
PHPのpreg_quote関数は、文字列に含まれる正規表現の特殊文字をエスケープし、その文字列を正規表現パターンの一部として安全に利用するために不可欠です。システムエンジニアとして、この関数の最も重要な注意点は、第2引数に正規表現のデリミタ文字を必ず指定することです。
もし検索したい文字列の中に、正規表現パターンを囲むデリミタ文字(例えばスラッシュ「/」など)が含まれている場合、preg_quoteにデリミタを指定しないと、そのデリミタ文字がエスケープされません。これにより、生成される正規表現の文法が崩壊したり、予期しないマッチングが発生したり、場合によってはセキュリティ上の問題につながる危険性があります。
安全なコードを作成するためには、正規表現で利用するデリミタ文字が検索対象の文字列に含まれる可能性がある場合は、常に第2引数でデリミタを指定する習慣を身につけてください。これにより、意図しない正規表現の誤動作を防ぎ、堅牢なアプリケーションを開発できます。