前書き
正規表現を使用する場面はよくあります。
一部の正規表現はよく使うため覚えていますが、覚えていない正規表現も多く、都度調べることになっています。
そこで、正規表現の全体像をまとめてみました。
正規表現
1. 基本的な正規表現
記号 | 意味 | 正規表現の例 | マッチする例 |
---|---|---|---|
. | 任意の1文字 | ab.d | abcd abed |
+ | 直前の文字の1回以上の繰り返し 最長一致(条件に合う一番長い部分に一致する) |
abc+d | abcd abccd |
* | 直前の文字の0回以上の繰り返し 最長一致(条件に合う一番長い部分に一致する) |
abc*d | abd abcd abccd |
? | 直前の文字が0個~1個の繰り返し 最長一致(条件に合う一番長い部分に一致する) |
abc?d | abd abcd |
+? | 直前の文字の1回以上の繰り返し 最短一致(条件に合う一番短い部分に一致する) |
abc+?d | abcd abccd |
*? | 直前の文字の0回以上の繰り返し 最短一致(条件に合う一番短い部分に一致する) |
abc*?d | abd abcd abccd |
?? | 直前の文字が0個~1個の繰り返し 最短一致(条件に合う一番短い部分に一致する) |
abc??d | abd abcd |
~|~ | |の左右の文字列のいずれか(~または~) | abcd(ef|gf) | abcdef abcdgf |
|直後の正規表現記号をエスケープする | ab+d | ab+d | |
[ ~ ] | [ ]の中のどれか1文字 | [abc] [a-c] |
a, b, c |
[^ ~ ] | [ ]の中に無い1文字 | [^abc] [^a-c] |
a, b, c以外の文字 |
( ~ ) | ( )内を1文字扱い(1つのグループにまとめる) | abcd(ef|gf) | abcdef abcdgf |
{n} | 直前の文字のn回の繰り返し | a{3} | aaa |
{n,} | 直前の文字のn回以上の繰り返し | a{3,} | aaa aaaa... |
{min,max} | 直前の文字のmin以上max以下の繰り返し(min、maxは省略可能) 最長一致(条件に合う一番長い部分に一致する) |
a{3,4} | aaa aaaa |
{min,max}? | 直前の文字のmin以上max以下の繰り返し(min、maxは省略可能) 最短一致(条件に合う一番短い部分に一致する) |
a{3,4} | aaa aaaa |
2. 定義済みの正規表現
記号 | 意味 | 対応する表現 |
---|---|---|
\t | タブ | (なし) |
\r | 改行。CR(Carriage Return:0x0D) | (なし) |
\n | 改行。LF(Line Feed:0x0A) | (なし) |
\d | 数字1文字 | [0-9] |
\D | 数字以外の1文字 | [^0-9] |
\s | 半角スペース、タブ、改行のどれか1文字 | [ \t\f\r\n] |
\S | 半角スペース、タブ、改行以外の1文字 | [^ \t\f\r\n] |
\w | アルファベット、数字、アンダスコア( _ )のどれかの1文字 | [a-zA-Z_0-9] |
\W | アルファベット、数字、アンダスコア以外の1文字 | [^a-zA-Z_0-9] |
3. 特定の位置関係の正規表現
記号 | 意味 |
---|---|
^ | 行の先頭 |
$ | 行の末尾 |
< | 単語の先頭 |
> | 単語の末尾 |
\b | 単語の先頭か末尾 |
\B | 単語の先頭、末尾以外 |
\A | ファイルの先頭 |
\z | ファイルの末尾 |
\G | 直前の一致文字列の末尾 |
4. 置換文字列で使える正規表現
記号 | 意味 |
---|---|
\0 | 一致した文字列全体 |
\1 \2 … \9 | それぞれ検索文字列の1~9番目の ( ) に一致した文字列 |
\l | 次の1文字を小文字にする |
\L...\E | 挟まれた文字列を小文字にする |
\u | 次の1文字を大文字にする |
\U...\E | 挟まれた文字列を大文字にする |
5. よく使う正規表現式
名称 | 正規表現 |
---|---|
Email アドレス (RFC準拠ではない) |
^\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)*$ |
URL | ^https?://([\w-]+.)+[\w-]+(/[\w-./?%&=]*)?$ |
ドメイン名 | ^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9].[a-zA-Z-]{2,}$ |
日付 (YYYY-MM-DD形式) | ^\d{4}-\d\d-\d\d$ |
桁区切りカンマ付数字 | \b\d{1,3}(,\d{3})*\b |
固定電話番号 | ^0\d(-\d{4}|\d-\d{3}|\d\d-\d\d|\d{3}-\d)-\d{4}$ |
携帯電話番号 | ^0[789]0-\d{4}-\d{4}$ |
IP 電話番号 | ^050-\d{4}-\d{4}$ |
フリーダイヤル | ^(0120|0800)-\d{3}-\d{3}$ |
郵便番号 | ^\d{3}-\d{4}$ |
以上