HIROTA YANO
FREE WEB TOOLS
JP
/
EN

正規表現|基本とメタ文字・特殊文字の一覧

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

正規表現とは

正規表現は文字列をパターンで表現する記法で、「○○で始まる」「○○を含んでいる」「○○の後に××が△文字ある」などでマッチさせることができます。そしてこのパターンを作成する特別な意味を持った文字をメタ文字と呼びます。
例)^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