正規表現…慣れるまでただ頭が痛くなるだけの存在。しかしながら慣れてくると離れられない素敵な知識です。エクセルや普通のテキストエディターでも使用できるので、ウェブ関係以外の一般の方も覚えておくと便利です。知っているのと知らないのとでは100倍くらいスピードが違うお仕事もちらほら。今回は、そんな正規表現について基本一覧からよく使う正規表現まで記事にしたみました。
正規表現とは何のこと?
正規表現とは通常の文字 (a ~ z など) と、 “量子指定” や “メタキャラクタ” などの特別な意味をもたせた特殊文字を組み合わせて作る特定のパターンで異なるいくつかの文字の並びを表現する手法で、現在では主に検索対象文字列のパターマッチングに使用されている手法です。
正規表現基本一覧
よく使う正規表現を表にします。忘れた時には確認して下さい。
メタキャラクタ
メタキャラクタとは、正規表現において、実際の複数の任意の文字や文字列を現す為に、ある文字や文字の組み合わせに特別な意味をもたせた文字形式です。
. | 任意の1文字 |
---|---|
\w | 英単語を構成する文字(a~z,A~Z,_,1~9) |
\W | 英単語を構成する文字以外 |
\s | 空白文字(半角スペース,タブ,改行,キャリッジリターン) |
\S | 空白文字以外 |
\d | 半角数字(0~9) |
\D | 半角数字以外 |
\b | 単語の境界に一致 |
[xyz] | 指定された文字のどれかに一致(この場合xyzのいずれかに一致) |
[a-z] | マッチする文字の範囲を指定する表現(この場合aからzまで他には[1-9][A-Z]など文字コードが連続していれば使える。) |
(pattern1|pattern2) | 指定されたパターンのどれかにマッチする表現 |
量子指定
量子指定とは、正規表現の中で文字や文字グループの出現回数を指定するのに用いられ、直前の文字、文字グループの出現回数を現します。
* | 0回以上の繰り返しにマッチ |
---|---|
+ | 1回以上の繰り返しにマッチ |
{n} | n回の繰り返しにマッチする表現 |
{n,} | n回以上の繰り返しにマッチする表現 |
{n,m} | n回以上m回以下の繰り返しにマッチする表現 |
? | 0回または1回の出現にマッチする表現 |
アンカー
アンカーとは、正規表現の中で文字列の位置を現す為に使用します。
^ | 文字列の先頭に一致 |
---|---|
$ | 文字列の末尾に一致 |
よく使う正規表現と簡単解説
よく使う正規表現をまとめて簡単に解説します。
メールアドレスの正規表現
^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
例 : Abc.123@example.com
メールアドレスの規定に基づいています。気になる方はメールアドレスで使用できる文字を確認してください。
^\w+
先頭が(a~z,A~Z,_,1~9)の英数字の一回以上の繰り返し。
([-+.]\w+)*
(- or + or .)のいずれかの文字と(a~z,A~Z,_,1~9)の1回以上の繰り返しの組み合わせの0回以上の繰り返し。
@
普通のアットマーク
\w+
(a~z,A~Z,_,1~9)の一回以上の繰り返し。
([-.]\w+)*
(- or .)のいずれかの文字と(a~z,A~Z,_,1~9)の1回以上の繰り返しの組みあわせのさらに0回以上の繰り返し。
\.
ドットをエスケープしただけ。ただのドット。
\w+
(a~z,A~Z,_,1~9)の一回以上の繰り返し。
([-.]\w+)*$
(- or .)のいずれかの文字と(a~z,A~Z,_,1~9)の文字の組み合わせの0回以上の繰り返し及び$マークで末尾終了。
ドメイン名の正規表現
^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]\.[a-zA-Z]{2,}$
例 : yourname.com
^[a-zA-Z0-9]
先頭は英数字から1文字。
[a-zA-Z0-9-]{1,61}
1から61文字までの英数字。
[a-zA-Z0-9]
英数字から1文字。先頭からここまでで最高で63文字。「~.com」の~の部分は63文字以下と決められています。
\.
ただのドット
[a-zA-Z]{2,}$
2文字以上の英字。$マーク末尾で終了です。
インターネットのURLの正規表現
^(http|https)://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$
例 : http://ja.yourname.com/bkb/
^(http|https)://
http://もしくはhttps://。
([\w-]+\.)+
(a~z,A~Z,_,1~9,-)の1回以上の繰り返しに1つのドットを合わせた文字列の1回以上の繰り返し。
[\w-]+
(a~z,A~Z,_,1~9,-)の1回以上の繰り返し。
(/[\w-./?%&=]*)?$
取り合えず’/’と(a~z,A~Z,_,1~9,-,.,/,?,%,&,=,)の0回以上の繰り返しを’?’で最短マッチ。$マーク末尾終了です。
以下、正規表現の例をいくつか示しますが、説明は割愛させていただきます。
固定電話の正規表現
^0\d{1,4}-\d{2,4}-\d{4}$
例 : 江別市役所 011-382-4141、三笠市役所 01267-2-3182
携帯電話の正規表現
^0[7-9]0-\d{4}-\d{4}$
例 : 090-1234-5078
郵便番号正規表現
^\d{3}-\d{4}$
例 : 251-0036(藤沢市片瀬)
日付 (YYYY-MM-DD)の正規表現
^\d{4}-\d{1,2}-\d{1,2}$
例 : 1987-2-30
正規表現まとめ
正規表現はwebな仕事に従事されている方以外にも本当に役に立つに知識です。一定の文字パターンの検索にかなりの力を発揮してくれます。はじめは少しとっつきづらいですが、仕事のお供にしていただければと思います。ipアドレスの仕様の変更など、検索文字列の仕様の変更、更新などで、正規表現の書き方も変わってきます。つど動作確認のうえ個人の責任のもとご使用下さい。それではまた。