Mercury::Regexがサポートしている構文・メタ文字のリファレンスです。 まだ開発中なので基本的な構文しかサポートしておらず、しかも微妙にクセがあったりします。 そのうち拡張していきますので気長に待っていてください。
特殊な意味を持つ文字の一覧です。 「カッコの対応がおかしい」「量化演算子の直前に因子がない」のように、正規表現として不適切なパターンが指定された場合、"mercury::REGERR_SYNTAX"例外がスローされます。
メタ文字 | 意味 | 解説 |
---|---|---|
\ | エスケープ |
直後の1文字を普通の文字として扱います。
メタ文字を普通の文字として扱いたい時に便利です。
現在のところ、「メタ文字の無効化」としての役割しかありません。
"\s"で空白、"\d"で数字といった使い方はできません("\n"は単なる"n"として扱われます)
|
| | 連言 |
左右のパターンのいずれかにマッチします。
|
* | 量化(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文字にマッチします。
|