⊗ppPmRgESCh 226 of 447 menu

PHP正規表現における特殊文字のエスケープ

特殊文字を文字そのものとして扱いたいとします。 そのためには、バックスラッシュを使用して エスケープする必要があります。 例を見てみましょう。

次の例では、正規表現の作成者は検索パターンを 文字 'a'、次にプラス記号 '+'、 次に文字 'x' としたかったのです。 しかし、コードの作成者は記号 '+' を エスケープしなかったため、実際の検索パターンは 文字 'a' が1回以上、その後 文字 'x' となっています:

<?php $str = 'a+x ax aax aaax'; $res = preg_replace('#a+x#', '!', $str); ?>

結果、変数には以下が書き込まれます:

'a+x ! ! !'

ここでは、作成者はプラス記号をバックスラッシュで エスケープしました。 これで検索パターンは意図した通り、 文字 'a'、次にプラス記号 '+'、 次に文字 'x' となります。

<?php $str = 'a+x ax aax aaax'; $res = preg_replace('#a\+x#', '!', $str); ?>

結果、変数には以下が書き込まれます:

'! ax aax aaax'

この例では、パターンは 文字 'a'、次にドット '.'、 次に文字 'x' のようになります:

<?php $str = 'a.x abx azx'; $res = preg_replace('#a\.x#', '!', $str); ?>

結果、変数には以下が書き込まれます:

'! abx azx'

次の例では、作成者はスラッシュをエスケープするのを 忘れ、エスケープされていないドットは任意の文字を 表すため、すべての部分文字列が正規表現に マッチしてしまいました:

<?php $str = 'a.x abx azx'; $res = preg_replace('#a.x#', '!', $str); ?>

結果、変数には以下が書き込まれます:

'! ! !'

ドットがそれ自体を表すべき場合にバックスラッシュを 忘れても、気づかない可能性があることに 注意してください:

<?php preg_replace('#a.x#', '!', 'a.x'); // 期待通り '!' を返します ?>

見た目は正しく動作します(ドットが任意の文字、 つまり通常のドット '.' も表すためです)。 しかし、置換を行う文字列を変更すると、 エラーがわかります:

<?php preg_replace('#a.x#', '!', 'a.x abx azx'); // '! ! !' を返しますが、期待は '! abx azx' でした ?>
日本語
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItalianoქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
当サイトでは、サイトの動作、分析、パーソナライゼーションのためにクッキーを使用しています。 データ処理はプライバシーポリシーに従って行われます。
すべて受け入れる 設定 拒否