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

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

プログラミングやコマンドラインで使われる正規表現についてご紹介します。

  • 正規表現

正規表現

正規表現は文字列をパターン化して表現する記法です。
一般的に文字列検索やファイル検索などで、パターンに一致するものを見つけるために使用されます。

記法

正規表現は文字、制御文字、メタ文字、定義文字で記述します。
プログラミング言語やOSなどで大部分は共通していますが、環境によって異なる場合があります。
細かい差異は環境ごとに確認してください。

文字

文字は後述の制御文字、メタ文字、定義文字以外のABなどの単体の文字です。

制御文字

制御文字とはタブや改行などの特別な動作を伴う文字です。
それらの文字はバックスラッシュと文字を使用して表すことができます。

制御文字 記法
タブ \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

まとめ

正規表現は文字列をパターン化した記法です。
ファイルや文字の検索に使用され、メタ文字等の特殊な文字を使用して、パターン化します。