【正規表現】メタ文字(特殊文字)一覧

正規表現で使うメタ文字(特殊文字)の一覧です。位置の指定、特殊文字、最長一致、最短一致、強欲な数量子、先読み、後読みなど。

正規表現とは

文字列が「○○で始まる」「○○を含んでいる」「○○の後に××が△文字ある」など、文字列がパターンにマッチするかどうかを評価する表現方法です。

正規表現でパターンを作成する際に使う特別な意味を持った文字をメタ文字と呼びます。

例)

^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」を検索する場合。

正規表現検索結果
最長一致^.*XabcXdefX
最短一致^.*?XabcX
強欲な数量子^.*+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
矢野ヒロタ / 1987年生まれ。プログラマー。
趣味で作ったWebツールを公開しています。無料ですのでご自由にお使いください。ブログは技術ネタと見せかけてもっぱら妄想です。よしなに。
© HIROTA YANO