正規表現|基本とメタ文字・特殊文字の一覧
正規表現で使うメタ文字(特殊文字)の一覧です。位置の指定、特殊文字、最長一致、最短一致、強欲な数量子、先読み、後読みなど。
正規表現とは
正規表現は文字列をパターンで表現する記法で、「○○で始まる」「○○を含んでいる」「○○の後に××が△文字ある」などでマッチさせることができます。そしてこのパターンを作成する特別な意味を持った文字をメタ文字と呼びます。
例)^foo.*bar$
:一行がfooで始まりbarで終わる文字列にマッチ
例)0[789]0-[0-9]{4}-[0-9]{4}
:携帯電話番号 (000-0000-0000) にマッチ
位置を指定するメタ文字
「行の先頭・末尾」など文字そのものではなく位置にマッチするメタ文字です。
メタ文字 | 意味 |
---|---|
^ | 行の先頭 |
$ | 行の末尾 |
\A | 文字列の先頭 |
\z | 文字列の末尾 |
\Z | 文字列の末尾(行末記号を除く) |
\b | 単語境界 |
\B | 非単語境界 |
※ ^
, $
を「行の先頭・末尾」としていますが、これはマルチラインモードの場合です(たいていこれがデフォルト)。シングルラインモードの場合は文字列全体の先頭・末尾になります。
特殊な文字を表すメタ文字
改行コードなどの非表示文字や、数字など一部の文字に包括的なマッチをするメタ文字です。
メタ文字 | 意味 |
---|---|
\ | エスケープ文字 (直後のメタ文字をエスケープする) |
\t | タブ文字 |
\n | 改行コード(CR) |
\r | 改行コード(LF) |
\f | 改ページ |
\d | 数字 |
\D | 数字以外 |
\s | 空白文字 (半角/全角スペース、タブ文字、改行コード、改ページ) |
\S | 空白文字以外 |
\w | 単語構成文字 (文字、数字、アンダースコア) |
\W | 単語構成文字以外 |
ワイルドカードと繰り返しのメタ文字(量指定子)
量指定子は直前のパターンの連続した繰り返しにマッチするメタ文字です。
量指定子には最長一致、最短一致、強欲な数量子があり、通常は最長一致です。(a*)*
のように量指定子を入れ子にすることもできますが、正規表現エンジン内での比較回数(負荷)が激増する可能性があるため注意が必要です。
最長一致 | 最短一致 | 強欲な数量子 | 意味 |
---|---|---|---|
. |
|
| 任意の1文字(改行コードを除く) |
* | *? | *+ | 直前の1文字・グループが 0 回以上 |
+ | +? | ++ | 直前の1文字・グループが 1 回以上 |
? | ?? | ?+ | 直前の1文字・グループが 0 回または 1 回 |
{n} | {n}? | {n}+ | 直前の1文字・グループが n 回 |
{n,} | {n,}? | {n,}+ | 直前の1文字・グループが n 回以上 |
{n,m} | {n,m}? | {n,m}+ | 直前の1文字・グループが n 回以上、m 回以下 |
最長一致
条件に合う一番長い部分に一致し、 パターン全体が一致することを優先する。
最短一致
条件に合う一番短い部分に一致する。
強欲な数量子
条件に合う一番長い部分に一致し、パターン全体が一致することを優先しない。
例)「abcXdefX」を検索する場合。
正規表現 | 検索結果 | |
---|---|---|
最長一致 | ^.*X | abcXdefX |
最短一致 | ^.*?X | abcX |
強欲な数量子 | ^.*+X | 一致しない* |
強欲な数量子 | ^.*+ | abcXdefX |
^.*+
」だけで全体に一致するため最後のXが一致しない。候補からの選択(OR条件)を表すメタ文字
複数の文字のグループ化や、OR条件(いずれかにマッチ)やNOT条件(~以外にマッチ)を表現するメタ文字です。
メタ文字 | 意味 |
---|---|
() | グループ化(グループ化構成体) |
| | いずれかの文字列(代替構成体) |
[] | いずれかの1文字 |
|の用例
正規表現 | 意味 |
---|---|
abc|mno|xyz | 単純 (abc、mno、xyzのいずれか) |
abc.*X|m+o|xy?z | 候補にメタ文字を含める (abcXXX、mXo、xzなど) |
(abc|mno|xyz)X | 他の文字列と組み合わせる (abcX、mnoX、xyzXのいずれか) |
(abc|mno|xyz)* | 量指定子と組み合わせる (abcabc、mnoabcxyzなど) |
[]の用例
正規表現 | 意味 |
---|---|
[abc] | 単純(a、b、cいずれか1文字) |
[^abc] | 否定(a、b、c以外の1文字) |
[a-z] | 範囲指定(半角英小文字) |
[A-Z] | 範囲指定(半角英大文字) |
[0-9] | 範囲指定(半角数字) |
[ぁ-ん] | 範囲指定(ひらがな) |
[ァ-ヴ] | 範囲指定(カタカナ) |
[ヲ-゚] | 範囲指定(半角カタカナ) |
[a-zA-Z] | 結合(a~z または A~Z) |
[a-z&&[d-f]] | 交差(a~z かつ d~f) |
[a-z&&[^d-f]] | 減算(d~f を除く a~z) |
先読みと後読みのメタ文字
特定パターンの前方または後方で、別のパターンのマッチングを行うためのメタ文字です。
メタ文字 | 意味 | 用例 | 用例の意味 |
---|---|---|---|
?= | 肯定的先読み | foo(?=bar) | 直後がbarのfoo |
?! | 否定的先読み | foo(?!bar) | 直後がbarでないfoo |
?<= | 肯定的後読み | (?<=bar)foo | 直前がbarのfoo |
?<! | 否定的後読み | (?<!bar)foo | 直前がbarでないfoo |