正規表現 - 文字列をパターン表現する
プログラミングやコマンドラインの正規表現について解説します。
正規表現
正規表現は“文字列をパターン化して表現する記法”です。
主に文字列検索やファイル検索などにおいて、パターンに一致するモノを見つけるために使用します。
使用文字
正規表現の使用文字は『通常文字』・『制御文字』・『メタ文字』・『定義文字』があります。
それらの文字を組み合わせて文字列をパターン化して表現します。
プログラミング言語やOS等によって、多少異なる部分がありますので、環境に合わせて確認してください。
通常文字
通常文字は制御文字、メタ文字、定義文字以外の『A
』や『あ
』などの単体文字です。
制御文字
制御文字はタブや改行などを表す文字です。
バックスラッシュと文字を組み合わせて表現します。
制御文字 | 記法 |
---|---|
タブ | \t |
改行 | \n |
復帰 | \r |
NULL | \0 |
メタ文字
メタ文字はパターンを表現する特殊な意味を持つ文字です。
メタ文字 | 意味 |
---|---|
. |
任意の1文字 |
* |
直前の文字を繰り返し(0回以上) |
+ |
直前の文字を繰り返し(1回以上) |
{} |
直前の文字を繰り返し(指定回数) |
? |
直前の文字が1つまたは無し |
^ |
直後の文字で始まる |
$ |
直前の文字で終わる |
| |
前後いずれかの文字 |
[] |
角括弧内のいずれかの文字 |
() |
丸括弧内をグループ化 |
エスケープシーケンス
エスケープシーケンスは“特殊な文字を通常文字として表現する方法”です。
メタ文字は正規表現で特殊な意味を持つため、通常の文字として扱う場合はメタ文字の直前にバックスラッシュ(\)を付けます。
\. \* \+ \? \{ \} \^ \$ \| \[ \] \( \)
定義文字
定義文字は特定の文字を簡潔に表す文字です。
定義文字 | 意味 |
---|---|
\d |
数字文字 |
\D |
数字文字以外 |
\w |
アンダースコア(_)を含む英数字 |
\W |
アンダースコア(_)を含む英数字以外 |
\s |
空白文字 |
\S |
空白文字以外 |
修飾子
修飾子は正規表現の詳細な条件を指定します。
正規表現をスラッシュ(/
)で括り、末尾に条件を表す文字を記述します。
/正規表現/条件
修飾子 | 意味 |
---|---|
/正規表現/i |
大文字・小文字の区別なし |
/正規表現/m |
マルチラインモード |
/正規表現/s |
シングルラインモード |
/正規表現/g |
グローバルマッチモード |
例
文字のみ
文字のみの場合、検索できる文字列は正規表現と同等の文字列です。
Apple
↓ マッチ例
Apple
.
任意の一文字
.
は改行を除く全ての1文字にマッチします。
Ap.le
↓ マッチ例
Apple
ApXle
ApZle
*
直前の文字を繰り返し(0回以上)
*
は直前文字を0回以上繰り返す文字列にマッチします。
Ap*le
↓ マッチ例
Ale
Aple
Apple
+
直前の文字を繰り返し(1回以上)
+
は直前文字を1回以上繰り返す文字列にマッチします。
Ap+le
↓ マッチ例
Aple
Apple
Appple
{}
直前の文字を繰り返し(指定回数)
{}
は直前文字を指定回数繰り返す文字列にマッチします。
直前文字を2回繰り返す
Ap{2}le
↓ マッチ例
Apple
直前文字を2回以上、4回以下繰り返す
Ap{2,4}le
↓ マッチ例
Apple
Appple
Apppple
直前文字を3回以下繰り返す
Ap{,3}le
↓ マッチ例
Ale
Aple
Apple
Appple
?
直前の文字が1つまたは無し
?
は直前の文字が1つまたは無い文字列にマッチします。
App?le
↓ マッチ例
Aple
Apple
また、?
は*
、+
、{}
、?
の直後に付けることで最短マッチできます。
*?
検索文字
AppleApple
最長マッチ
A.*e
↓ マッチ例
AppleApple
最短マッチ
A.*?e
↓ マッチ例
Apple
+?
検索文字
AppleApple
最長マッチ
A.+e
↓ マッチ例
AppleApple
最短マッチ
A.+?e
↓ マッチ例
Apple
{}?
検索文字
XXXXXXX
最長マッチ
X{2,5}
↓ マッチ例
XXXXX
最短マッチ
X{2,5}?
↓ マッチ例
XX
??
検索文字
Apple
最長マッチ
Apple?
↓ マッチ例
Apple
最短マッチ
Apple??
↓ マッチ例
Appl
^
直後の文字で始まる
^
は直後文字で始まる文字列にマッチします。
^Apple
↓ マッチ例
Apple
$
直前の文字で終わる
$
は直前文字で終わる文字列にマッチします。
Apple$
↓ マッチ例
Apple
|
前後のいずれかの文字列
|
は前後のいずれかの文字列にマッチします。
Apple|Orange
↓ マッチ例
Apple
Orange
[]
角括弧内のいずれかの1文字
[]
は角括弧内のいずれかの1文字にマッチします。
[ABC]pple
↓ マッチ例
Apple
Bpple
Cpple
各括弧にはいくつかの省略形があります。
省略形 | 意味 |
---|---|
[A-Z] |
アルファベット(大文字) |
[a-z] |
アルファベット(小文字) |
[0-9] |
数字 |
[A-Za-z0-9_] |
アルファベット(大小)、数字、アンダースコア |
また、[]
内ではメタ文字は通常の文字として扱われます。
[A*)]pple
↓ マッチ例
Apple
*pple
)pple
ただし、[
の直後に^を記述した場合は角括弧内の文字以外という意味になります。
[^A*]pple
↓ マッチ例
Bpple
Cpple
()
丸括弧内をグループ化
()
は丸括弧内の文字列をグループ化します。
グループ化した文字列に対して、*
、+
、{}
、?
などのメタ文字を使用したり、グループごとにマッチさせることが可能です。
(ABC)+
↓ マッチ例
ABC
ABCABC
ABCABCABC
/正規表現/i
大文字・小文字の区別なし
/正規表現/i
は大文字と小文字の区別なしでマッチします。
検索対象
Apple
正規表現
/apple/i
↓ マッチ例
Apple
/正規表現/m
マルチラインモード
/正規表現/m
はマルチラインモードでマッチします。
マルチラインモードでは^
と$
の対象は行単位になり、.
は改行を含みません。
検索対象
Apple\nAxxle\nXXXXe
正規表現
/^A.*e$/m
↓ マッチ例
Apple
/正規表現/s
シングルラインモード
/正規表現/s
はシングルラインモードでマッチします。
シングルラインモードでは^
と$
の対象は文字列全体になり、.
は改行を含みます。
検索対象
Apple\nAxxle\nXXXXe
正規表現
/^A.*e$/s
↓ マッチ例
Apple\nAxxle\nXXXXe
/正規表現/g
グローバルマッチモード
/正規表現/g
はグローバルマッチモードでマッチします。
グローバルマッチモードは最初のマッチで終了せず、以降の文字列もマッチするか検索します。
検索対象
AppleAxxleXXXXe
正規表現
/A.*?e/g
↓ マッチ例
Apple
Axxle