正規表現について

目次

プラコレのエンジニアの井出です。

本日は、正規表現についてお話出来ればと思います。

普段そんなに頻繁に使用しないこともあり
忘れる事も多いため、今回まとめてみようと思います!

よろしくお願いいたします!!

正規表現について

正規表現とは、指定文字列をパターンで表現する方法で、
文字列を検索や置換を実行できるプログラミング言語になります。

有名どころのテキストエディタであれば標準で搭載されています。

正規表現を使用するに辺り重要となるのはメタ文字という存在があります

メタ文字とは
それ単独で意味を成す、正規表現での記述になります。
それらをまとめて使用する事により色々な表現ができるので
以下に良く使用するものをまとめました。

文字系

記載方法 意味 記載例 ヒットする ヒットしない
. 任意の一文字 a.z abz, acz, aaz abbz, accz
^ 文字列の先頭 ^abz abzdef defabz
$ 文字列の末尾 abz$ defabz abzdef
* 0回以上の繰り返し az* a, az, azz, azzz aa, zz
+ 1回以上の繰り返し az+ az, azz, azzz a, aa, zz
? 0回または1回 az? a, az azz
{m} m回の繰り返し a{3} aaa a, aa, aaaa
{m,n} m〜n回の繰り返し a{2, 4} aa, aaa, aaaa a, aaaaa
[] クラス分け [a-c] a, b, c d, e, f
| どちらかであれば a|b a, b c, d
() グループ化 (abc)+ abc, abcabc a, ab, abcd

エスケープシーケンス表現

記載方法 意味 クラス分けでの表現
\n 改行文字
\t タブ文字
\s 空白文字すべて [\t\n\r\f\v]
\S 空白文字以外すべて [^\t\n\r\f\v]
\d すべての半角数字 [0-9]
\D 半角数字以外すべて [^0-9]
\l 半角英小文字すべて [a-z]
\L 半角英小文字以外すべて [^a-z]
\u 半角英大文字すべて [a-zA-Z]
\U 半角英大文字以外すべて [^a-zA-Z]

範囲指定の表現

記載方法 対象データ ヒットする
[0-9] 半角数字 0~9のいずれか1つ
[0-9] 全角数字 0~9のいずれか1つ
[0-90-9] 半角全角数字 0~90~9のいずれか1つ
[a-z] 半角英文字列 a~zのいずれか1つ
[A-Z] 全角英文字列 A~Zのいずれか1つ
[a-zA-Z] 半角全角英文字列 a~zA~Zのいずれか1つ
[ぁ-ん] ひらがな あ~んのいずれか1つ
[ァ-ヴ] カタカナ ア~ヴのいずれか1つ

練習

では実際にこれらの記載を応用して、普段身近に使っている
データに対しての正規表現を作ってみましょう。

内容 記載方法 ヒットする文字列データ
郵便番号 \d{3}-\d{4} 165-0026
電話番号 \d{1,4}-\d{1,4}-\d{4} 0120-12-1234
大小文字の対応 (i|I)Phone iPhone|IPhone
サブドメの検索 .+pla-cole.co tech.pla-cole.co|roulette.pla-cole.co
実用例 私の名前は(井出|井手)です。 私の名前は井出です。|私の名前は井手です。

最後に

正規表現を利用すると、一括して文字列を置換する事も容易にできるため
作業効率が上がるだけでなく、システムとして特定ワードを置換して出力させる
といった要件にも対応する事ができるため、エンジニア以外の方も
覚えておいてそんのない技術になります!

下記のチェックサイトなどを利用して
反復練習をするといいかもしれないです!

正規表現チェッカー
http://okumocchi.jp/php/re.php

正規表現は奥が深いため、
もう少しコアな書き方を勉強してまたまとめようと思います!

ご清聴ありがとうございました。