正規表現リファレンス

Mercury::Regexがサポートしている構文・メタ文字のリファレンスです。 まだ開発中なので基本的な構文しかサポートしておらず、しかも微妙にクセがあったりします。 そのうち拡張していきますので気長に待っていてください。

メタ文字

特殊な意味を持つ文字の一覧です。 「カッコの対応がおかしい」「量化演算子の直前に因子がない」のように、正規表現として不適切なパターンが指定された場合、"mercury::REGERR_SYNTAX"例外がスローされます。

メタ文字 意味 解説
\ エスケープ
特殊な文字を表したり、メタ文字を無効化したりするのに使います。 詳しくはエスケープシーケンスを参照してください。
^ 行頭
行頭にマッチします。 パターンの先頭以外では普通の文字として扱われます。
$ 行末
行末にマッチします。 パターンの末尾以外では普通の文字として扱われます。
| 連言
左右のパターンのいずれかにマッチします。
* 量化(0回以上)
直前の因子(ファクタ)の0回以上の繰り返しにマッチします。
+ 量化(1回以上)
直前の因子(ファクタ)の1回以上の繰り返しにマッチします。
? 量化(0回または1回)
直前の因子(ファクタ)の0回または1回の繰り返しにマッチします。
{n} 量化(n回)
直前の因子(ファクタ)のn回の繰り返しにマッチします。
nは符号なし整数です。
{n,} 量化(n回以上)
直前の因子(ファクタ)のn回以上の繰り返しにマッチします。
nは符号なし整数です。
{m,n} 量化(m回以上n回以下)
直前の因子(ファクタ)のm回以上n回以下の繰り返しにマッチします。
m, nは符号なし整数です。
m>nの場合は、"mercury::REGERR_QUANT_MINMAX"例外がスローされます。
. 任意の1文字
任意の1文字にマッチします。
[ ] 集合
内部に現れるいずれかの1文字にマッチします。
'-'を使って範囲を指定することもできます。 例えば'[a-z]'は、アルファベットの小文字1文字にマッチします。
'[b-a]'のように、'-'の左側の文字コードの方が右側よりも大きい場合、"mercury::REGERR_SET_RANGE"例外がスローされます。
'['と']'の内部では、'\', '^', '-'以外のメタ文字は普通の文字として扱われます。 また、'^'は'['の直後に現れたとき、'-'は前後を文字に囲まれているとき以外は普通の文字として扱われます。
集合内では、文字クラスを使うこともできます。 文字クラスを使うと、アルファベットや数字等を文字コードに依存せずに指定できます。 詳しくは文字クラスを参照してください。
[^ ] 補集合
内部に現れないいずれかの1文字にマッチします。
メタ文字や文字クラスの使い方は、集合と同じです。
( ) グループ化
演算子の優先順位を変更します。 '('と')'で囲まれた部分の優先度が高くなります。
例えば、'abc*'は'ab'の後に続く0個以上の'c'にマッチしますが、'(abc)*'は0個以上の'abc'の連続にマッチします。

文字クラス

「アルファベットの大文字のどれか」を指定する時は、[A-Z] のように集合内で文字範囲を指定することができますが、この方法は文字コードやロケールに依存します。 次の文字クラスを使うと文字コードやロケールに依存せず、確実に特定の文字を指定できます。

これらの文字クラスは集合内でしか使えませんので、実際に使う場合は [[:upper:]] や [^[:alpha:][:blank:]] のように集合の内部で指定します。

文字クラス 意味
[:upper:]
アルファベットの大文字のいずれか1文字にマッチします。
[:lower:]
アルファベットの小文字のいずれか1文字にマッチします。
[:alpha:]
アルファベットのいずれか1文字にマッチします。
[:alnum:]
アルファベットまたは数字のいずれか1文字にマッチします。
[:digit:]
数字のいずれか1文字にマッチします。
[:xdigit:]
16進数字のいずれか1文字にマッチします。
[:punct:]
句読点のいずれか1文字にマッチします。
[:blank:]
スペースまたはタブのいずれか1文字にマッチします。
[:space:]
空白文字のいずれか1文字にマッチします。
[:cntrl:]
制御文字のいずれか1文字にマッチします。
[:graph:]
印字可能文字のいずれか1文字にマッチします。
[:print:]
印字可能文字もしくはスペースのいずれか1文字にマッチします。

エスケープシーケンス

"\" の後に文字(エスケープ文字)を続けることで、制御文字や文字クラス等、さまざまな特殊文字を表すことができます。 "\"とエスケープ文字の一連のつながりをエスケープシーケンスと呼びます。 文字クラスは集合の内部でしか使えませんが、エスケープシーケンスは集合の内部でも外部でも使用できます。

エスケープシーケンスの一覧は以下の通りです。 一覧にない文字がエスケープ文字として続いた場合、その文字を強制的に普通の文字として扱います。 メタ文字を無効化したいときに使います。

エスケープシーケンス 意味
\a
ベル文字にマッチします。
\r
復帰(CR)文字にマッチします。
\n
改行(LF)文字にマッチします。
\f
改ページ(FF)文字にマッチします。
\t
水平タブ(HT)文字にマッチします。
\v
垂直タブ(VT)文字にマッチします。
\e
エスケープ文字にマッチします。
\u
アルファベットの大文字のいずれか1文字にマッチします。
集合の外部でも使えるという点を除けば、[:upper:]と同じです。
\U
\uの補集合です。
\l
アルファベットの小文字のいずれか1文字にマッチします。
集合の外部でも使えるという点を除けば、[:lower:]と同じです。
\L
\lの補集合です。
\d
数字のいずれか1文字にマッチします。
集合の外部でも使えるという点を除けば、[:digit:]と同じです。
\D
\dの補集合です。
\s
空白文字のいずれか1文字にマッチします。
集合の外部でも使えるという点を除けば、[:space:]と同じです。
\S
\sの補集合です。
\w
C言語の識別子の2文字目以降に使用可能な文字にマッチします。
[[:alnum:]_]と同じです。
\W
\wの補集合です。