CmhaDSO 正規表現

概要

メタ文字セットには以下の3種がある。 GNUやPerlにおける拡張正規表現メタ文字セットなどは多くの場合、EREの拡張である。

BREメタ文字セット

置換前(ブラケット外)文字列の場合
メタ文字 意味
^ 文字列(通常は行)の先頭にマッチ(先頭以外では通常文字とみなす)
$ 文字列(通常は行)の末尾にマッチ(末尾以外では通常文字とみなす)
. 任意の1文字とマッチ
[...] [と]で囲まれた中で列挙した文字のいずれか1文字とマッチ
[^...] [^と]で囲まれた中で列挙した文字以外の任意の1文字とマッチ
* 【繰返し指定子】直前に記述した文字が0文字以上連続していることを指定し、後続の繰返し指定子よりも優先して可能な限り最大数マッチさせる
\{n\} 【繰返し指定子】直前に記述した文字がn文字連続していることを指定する
\{n,\} 【繰返し指定子】直前に記述した文字がn文字以上連続していることを指定し、後続の繰返し指定子よりも優先して可能な限り最大数マッチさせる
\{m,n\} 【繰返し指定子】直前に記述した文字がm文字以上、n文字以下連続していることを指定し、後続の繰返し指定子よりも優先して可能な限り最大数マッチさせる
\(...\) 【包括指定子】\(と\)で囲まれた範囲の文字列を、上記の繰返し指定子1文字として処理させたい場合、もしくはsedなどで置換後に再利用したい文字列範囲を指定したい場合に使用する
\n 【後方参照子】n番目に記した包括指定子でマッチした文字列にマッチする。たとえばABC123ABCABCという文字列を^\([A-Z]*\)123\1*$という正規表現文字列にかければ、\1はABCという文字列とみなされるため、\1*は末尾にある2つのABCにマッチする
\x 上記の中、バックスラッシュで始まらないメタ文字自身、あるいはAWKやsedなどで正規表現の始まりを示すために用いた文字自身を指定したい場合に、xの部分にその文字を記述すればそれにマッチ
\\ バックスラッシュ自身にマッチ
置換前(ブラケット内)文字列の場合
メタ文字 意味
^ 開きブラケット([)の直後(-や]自身を指定したい場合でもそれらより手前)に記述すると否定の意味になる
- 文字を列挙する代わりに範囲で指定できる。もし「-」自身を指定したい場合は、閉じブラケットの直前(閉じブラケット「]」自身も指定したい場合はそれよりも後る)に記述する
[ 閉じブラケット(])の直前(ただし「-」自身も指定する場合は「-」の方が後ろ)に記述すると「[」自身を指定できる
] 開きブラケット([)の直後に記述すると「]」自身を指定できる
\x 上記の中、バックスラッシュで始まらないメタ文字自身、あるいはAWKやsedなどで正規表現の始まりを示すために用いた文字自身を指定したい場合に、xの部分にその文字を記述すればそれにマッチ
\\ バックスラッシュ自身にマッチ
置換後文字列の場合
メタ文字 意味
\n n番目に記した包括指定子(\(...\))で囲まれた範囲にマッチした文字列に置換される
& マッチした文字列全体に置換される
\x 上記の中、バックスラッシュで始まらないメタ文字自身、あるいはAWKやsedなどで正規表現の始まりを示すために用いた文字自身を指定したい場合に、xの部分にその文字を記述すればそれにマッチ
\\ バックスラッシュ自身にマッチ

EREメタ文字セット

EREメタ文字セットの多くはBREの拡張であるが、以下の点が異なる。

置換前(ブラケット外)文字列の場合
メタ文字 意味
^ 文字列(通常は行)の先頭にマッチ(先頭以外では通常文字とみなす)
$ 文字列(通常は行)の末尾にマッチ(末尾以外では通常文字とみなす)
. 任意の1文字とマッチ
[...] [と]で囲まれた中で列挙した文字のいずれか1文字とマッチ
[^...] [^と]で囲まれた中で列挙した文字以外の任意の1文字とマッチ
* 【繰返し指定子】直前に記述した文字が0文字以上連続していることを指定し、後続の繰返し指定子よりも優先して可能な限り最大数マッチさせる
+ 【繰返し指定子】直前に記述した文字が1文字以上連続していることを指定し、後続の繰返し指定子よりも優先して可能な限り最大数マッチさせる
{n} 【繰返し指定子】直前に記述した文字がn文字連続していることを指定する
{n,} 【繰返し指定子】直前に記述した文字がn文字以上連続していることを指定し、後続の繰返し指定子よりも優先して可能な限り最大数マッチさせる
{m,n} 【繰返し指定子】直前に記述した文字がm文字以上、n文字以下連続していることを指定し、後続の繰返し指定子よりも優先して可能な限り最大数マッチさせる
? 【繰返し指定子】直前に記述した文字が0文字以上1文字以下連続していることを指定する
(...) 【包括指定子】(と)で囲まれた範囲の文字列を、上記の繰返し指定子1文字として処理させたい場合、もしくはsedなどで置換後に再利用したい文字列範囲を指定したい場合に使用する
| 【論理和指定子】この指定子の左の文字列または右の文字列でマッチさせることを指定する。左右の範囲は前述の包括指定子の中であればその始端または終端まで、なければ正規表現文字列全体の始端または終端まで(^や$も内包させる)とみなされる。^A|B$は^(A|B)$ではなく(^A)|(B$)の意味に解釈される。
\x 上記の中、バックスラッシュで始まらないメタ文字自身、あるいはAWKやsedなどで正規表現の始まりを示すために用いた文字自身を指定したい場合に、xの部分にその文字を記述すればそれにマッチ
\\ バックスラッシュ自身にマッチ
置換前(ブラケット内)文字列の場合

BREと同様である。

置換後文字列の場合

BREと同様である。

AWK(EREのサブセット)メタ文字セット

基本的にはERE同様であるが、以下の点が異なる。

文字 置換後文字
\\ バックスラッシュ「\」に置換される
\/ スラッシュ「/」に置換される
\" ダブルクォーテーション「"」に置換される
\ddd dddが3桁の8進数であるとき、その値の文字コードに該当する文字に置換される
\a ビープ音に置換される
\b バックスペースに置換される
\f 改ページに置換される
\n 改行に置換される
\r 行頭復帰に置換される
\t 水平タブに置換される
\v 垂直タブに置換される
\(上記以外) 未定義
置換前(ブラケット外)文字列の場合
ブレースを用いた繰り返し指定子(「{」「}」)以外のすべてのEREメタセットに対応している。 ただし上記のエスケープ処理を受ける。
置換前(ブラケット内)文字列の場合

BREと同様である。 ただし上記のエスケープ処理を受ける。

置換後文字列の場合

BREと同様である。 ただし後方参照(\n)には対応していない。 また上記のエスケープ処理を受けるため、例えば「&」自身を指定したい場合は「\\&」と記述する。

Pythonメタ文字セット

EREに加えて以下のメタ文字を使用できる。

メタ文字 意味
\A 文字列の先頭でのみ
\b 空文字列。ただし単語の先頭または末尾でのみ
\B 空文字列。ただし単語の先頭または末尾でない場合でのみ。
\d [0-9]
\D [^0-9]
\s [\t\n\r\f\v]
\S [^\t\n\r\f\v]
\w [a-zA-Z0-9_]
\W [^a-zA-Z0-9_]
\Z 文字列の末尾でのみ