見出し画像

【正規表現編】正規表現とは?PHPで$と\を文字列として入力する際の注意点

今回は正規表現編ということで、正規表現とはなんなのか、"$"と"\"をエスケープする際の注意点について解説していきます。自分の備忘録としての記録ですが、駆け出しエンジニアの方々の役に立てれば幸いです!

正規表現とは?

正規表現(せいきひょうげん、英: regular expression)は、文字列の集合を一つの文字列で表現する方法の一つである。正則表現(せいそくひょうげん)とも呼ばれ、形式言語理論の分野では比較的こちらの訳語の方が使われる。まれに正規式(せいきしき)と呼ばれることもある。

wikipedia「正規表現」より

簡単にいうと、正規表現は文字列を表したり、文字のパターンを作ることができるものです。正規表現を使うことで、主に「判定」「検索」「置換」の3つの処理を超絶効率よく行うことができちゃいます。

こうやって表現する!

正規表現はリテラル文字とメタ文字を組み合わせることで、例えば電話番号「080-0000-0000」、aから始まってyで終わる文字列、8桁の1~5を含む数字…など文字列のパターンを表すことができます。

リテラル文字とは

リテラル文字とは、通常の文字のことです。
アルファベットのa~z、数字の0~9、ひらがな、カタカナ、漢字などがリテラル文字にあたります。

メタ文字とは

メタ文字とは、特殊な機能を果たす文字です。. ^ ? $ [ { \ などのアルファベットではない記号がメタ文字にあたります。これらの記号に各役割があり、リテラル文字と組み合わせることで、文字列のパターンを表現することができます。以下表1がメタ文字を使った基本的な正規表現です。

表1

これらのメタ文字を文字列として認識させたい場合、表1最後の行にも記載した「エスケープ」処理が必要になります。
エスケープとは、メタ文字の直前に\(バックスラッシュ)をつけることで、メタ文字の特別な意味を打ち消し、メタ文字自身を表すことができるんです。

表2

PHPで$と\をエスケープする際の注意点

基本的にはエスケープ処理は表2のパターンでできるのですが、
仕事でPHPの単語チェックツールを作成している時、$や\を文字列として認識させたいのに「\$」「\\」と入力しても、きちんと認識してくれないということがありました・・・方法は合っているのになぜ。。。

メタ文字のエスケープ方法については色々なサイトで解説されていますが、基本的には上記のやり方で通用するからか、$と\の別の書き方が全くと言っていいほど出てきません。。。

で、色々試した結果
$は「\\\$」、\ は「\\\\」で表す必要がありました。

のちに調べたところ、デミリタを使用している場合、PHPだと文字列の中でのバックスラッシュやドルは特別な意味を表すため、「\\\$」や「\\\\」のように記述する必要がありました。

もし、「\$」「\\」で処理ができない…と同じ状況に陥ったら、ぜひ上記の方法を試してみてくださいね!

まとめ

・正規表現とは、文字列や文字のパターンを作ることができるもの
リテラル文字メタ文字を組み合わせることで、様々な文字列を表現することができる
・メタ文字を文字列として表したい場合、「\」でエスケープ処理が必要
・特に、PHPで$と\がエスケープできない場合は、「\\\$」「\\\\」で試してみるべし!


〈参考資料〉
・Joe, "正規表現とは?メタ文字とサンプル一覧", WWWクリエイターズ, 2019年11月12日, https://www-creators.com/archives/4278, (アクセス日:2022年2月20日).
・運用ナビ, "正規表現を使ってみよう!リテラルとメタ文字、パターンの基本のキ", 2020年2月6日, https://un4navi.com/prologue/20071/, (アクセス日:2022年2月20日).
・MEGSOFT, "正規表現 メタ文字一覧", 更新日不明, https://www.megasoft.co.jp/mifes/seiki/meta.html, (アクセス日:2022年2月20日).
・雄介 香月, 株式会社ペライチ, "【保存版】正規表現でエスケープが必要な文字一覧表", Qiita, 2016年12月29日, https://qiita.com/katsukii/items/1c1550f064b4686c04d4, (アクセス日:2022年2月20日).

この記事が気に入ったらサポートをしてみませんか?