技術コンテンツ

正規表現 - 文字列をパターン表現する

正規表現 - 文字列をパターン表現する

プログラミングやコマンドラインの正規表現について解説します。

正規表現

正規表現は“文字列をパターン化して表現する記法”です。

主に文字列検索やファイル検索などにおいて、パターンに一致するモノを見つけるために使用します。

使用文字

正規表現の使用文字は『通常文字』・『制御文字』・『メタ文字』・『定義文字』があります。

それらの文字を組み合わせて文字列をパターン化して表現します。

プログラミング言語や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