正規表現のリファレンス
ここでは、特定の Araxis 製品で使用できる正規表現の構成と構文を説明します。
下記テキストは Regex++ ライブラリの正規表現構文のドキュメントを編集したものです。オリジナルのテキストは Boost website ウェブサイトでご覧になれます。
リテラル
以下の特殊文字を除くすべての文字がその文字自体と一致します。
.|*?+(){}[]^$\
これらの文字は、その前に \ が付けられた場合にその文字自体と一致します。
ワイルドカード
ドット文字 ‘.’ はすべての単一文字に一致します。
行のアンカー
‘^’ 文字は行の先頭の場合ヌル文字列と一致します。
‘$’ 文字は行の末尾の場合ヌル文字列と一致します。
繰り返し
繰り返しは、何回でも任意の回数繰り返された文字の式です。‘*’ に続く式はゼロ回も含め任意の回数繰り返されます。‘+’ に続く式は最低 1 回、任意の回数繰り返されます。
‘?’ に続く式はゼロ回または 1 回のみ現れます。最小または最大の繰り返し回数を明示的に指定する必要がある場合は、バウンド演算子 {}を使用します。つまり、a{2} は文字 ‘a’ が正確に 2 回繰り返されることを表し、a{2,4} は文字 ‘a’ が 2 回から 4 回繰り返されることを表します。a{2,} は文字 ‘a’ が最低 2 回、上限はなしで繰り返されることを表します。{} 内に空白は使用できないので注意してください。また、最小および最大の繰り返し回数にはいずれも上限はありません。すべての繰り返し式は、直前のサブ式である単一文字、文字セット、または、たとえば () でくくられたサブ式を参照します。
例
ba* は b, ba, baaa などのすべてと一致します。
ba+ は、たとえば ba や baaaa と一致しますが、b とは一致しません。
ba? は b または ba と一致します。
ba{2,4} は baa、baaa および baaaa と一致します。
最短一致の繰り返し
繰り返しの後に ‘?’ を付加すると、最短一致の繰り返しが指定できます。最短一致の繰り返しは、出現する可能性のある文字列の最も短いものと一致します。
たとえば、次のような html 要素のペアに一致する場合を考えます。
<\s*tagname[^>]*>(.*?)<\s*/tagname\s*>
この場合、$1 (tagged-match 1, from (.*?)) はタグのペアの間にテキストを含み、最も短い一致する文字列となります。
かっこ
かっこには 2 つの目的があります。項目をまとめて 1 つのサブ式とすることと、何が一致を生成したかにマークを付けることです。たとえば、式 (ab)* は文字列 ababab の全部に一致します。
Araxis Merge では、行ペアリング ルールで正規表現を使用する場合、ペアリングに使用するサブ式を選択することができます。同様に、正規表現を使用して、行全体ではなく行の特定の一致した部分を無視する場合、無視するサブ式を選択することができます。
非マーキングのかっこ
場合によっては、サブ式をかっこでグループ化する必要があるけれども、かっこに他のマークされたサブ式を作成させたくないことがあります。この場合、非マーキングのかっこ(?:式)が使用できます。たとえば、次の式はサブ式を作成しません。
(?:abc)*
先読みの表明
2 つの形式があります。1 つは肯定の先読み表明で、もう 1 つは否定の先読み表明です。
(?=abc) は、次に abc という式が続く場合にのみゼロ文字に一致します。
(?!abc) は、次に abc という式が続かない場合にのみゼロ文字に一致します。
選択
式が 1 つのサブ式または別のサブ式に一致する場合に選択が起こります。それぞれの選択は ‘|’ によって区切られます。それぞれの選択は最も大きい前のサブ式で、これは、繰り返し演算子の逆の動作になります。
例:
a(b|c) は ab または ac に一致します。
abc|def は abc または def に一致します。
文字セット
セットは一連の文字で、任意の 1 文字とそのセットの内の 1 文字とが一致します。セットは ‘[’ および ‘]’ で区切られ、リテラル、文字範囲、文字クラス、照合要素、および等価クラスを含むことができます。セットの宣言は ‘^’ で始まり、要素の文字が続きます。
文字リテラル
[abc] は ‘a’、‘b’、または ‘c’ のいずれかと一致します。
[^abc] は ‘a’、‘b’、または ‘c’ 以外の任意の文字と一致します。
文字範囲
[a-z] は ‘a’ から ‘z’ の範囲にある任意の文字と一致します。
[^A-Z] は ‘A’ から ‘Z’ の範囲外にある任意の文字と一致します。
文字範囲は地域の設定によって大きく異なることに注意してください。文字範囲は、範囲の両端点の間に順に並んでいる任意の文字と一致します。照合順序に影響される言語で範囲を使用する場合は、範囲が期待どおりに処理されているか範囲外および不一致のサンプル式をテストすることをお勧めします。
文字クラス
文字クラスはセット宣言内で [:classname:] 構文を使用して指定します。たとえば、[[:space:]] はすべて空白文字のセットを示します。使用可能な文字クラスは次のとおりです。
| alnum | 任意の英数字。 |
| alpha | a-z および A-Z の任意の英字。地域の設定によりその他の文字も含まれます。 |
| blank | 任意の空白文字、空白またはタブ。 |
| cntrl | 任意の制御文字。 |
| digit | 0-9 の任意の数字。 |
| graph | 任意のグラフィック文字。 |
| lower | a-z の任意の英小文字。地域の設定によりその他の文字も含まれます。 |
| 任意の印刷可能文字。 | |
| punct | 任意の句読点文字。 |
| space | 任意の空白文字。 |
| upper | A-Z の任意の英大文字。地域の設定によりその他の文字も含まれます。 |
| xdigit | 0-9、a-f、および A-F の任意の 16進数字。 |
| word | 任意の言語文字。すべての英数字とアンダースコア。 |
| Unicode | コードが 255 より大きい任意の文字。これは、広幅特徴を持つクラスのみに適用されます。 |
文字クラスの代わりに使用できる以下のようなショートカットがあります。
\w は [:word:] のショートカット
\s は [:space:] のショートカット
\d は [:digit:] のショートカット
\l は [:lower:] のショートカット
\u は [:upper:] のショートカット
照合要素
照合要素はセット宣言内で一般形式 [.tagname.] をとります。tagname は単一の文字または照合要素の名前です。たとえば、[[.a.]] は [a] と同等で、[[.comma.]] は [,] と同等です。すべての標準の POSIX 照合要素名がサポートされており、さらに以下の連字がサポートされています。‘ae’、‘ch’、‘ll’、‘ss’、‘nj’、‘dz’、‘lj’、それぞれ小文字、大文字、および見出しのバリエーションがあります。複数文字の照合要素は、結果的に 1 文字より多く一致します。たとえば、[[.ae.]] は 2 文字に一致しますが、[^[.ae.]] は 1 文字のみに一致します。
等価クラス
等価クラスはセット宣言内で一般形式 [=tagname=] をとります。tagname は単一文字または照合要素の名前で、同じ原等価クラス [.tagname.] のメンバーである任意の文字と一致します。等価クラスは同じ照合を行う文字のセットで、主等価クラスは主ソート キーがすべて同じ文字のセットです(たとえば、文字列は一般的に文字で、次にアクセント、さらに大文字小文字で照合されます。主ソート キーはその文字に、第 2 キーはアクセント、そして第 3 キーは大文字小文字に関連付けられます。)。tagname に対応する等価クラスがない場合、[=tagname=] は [.tagname.] と完全に同一です。
リテラル ‘-’ をセット宣言に含めるには、[ または [^ の次の最初の文字とするか、範囲の終わり、照合要素とする、または [\-] のようにエスケープ文字をその前に付けます。セットにリテラル ‘[‘、’]’、または ‘^’ を含めるには、範囲の終わりまたは照合要素とするか、エスケープ文字をその前に付けます。
後方参照
後方参照は、既に一致している以前のサブ式への参照です。この参照はサブ式が一致したものへの参照で、式そのものへの参照ではありません。後方参照は、エスケープ文字の ‘\’ の後に数字の ‘1’ から ‘9’ を続けます。\1 は最初のサブ式を参照し、\2 は 2 番目のサブ式というようになります。たとえば、式 (.*)\1 はその中心で繰り返されるどんな文字列にも一致します。たとえば、abcabc または xyzxyz です。ほかの一致に関与しないサブ式への後方参照は、ヌル文字列に一致します。この点はほかの正規表現の一致とは異なるので注意してください。
コードによる文字表現
この拡張は、エスケープ文字に数字の ‘0’ を続け、その後に 8 進の文字コードを続けて表します。たとえば、\023 は 8 進コードが 23 の文字を表します。不明確な場合にはかっこを使用して式を分割します。\0103 はコードが 103 の文字を表しますが、(\010)3 はコードが 10 の文字の後に ‘3’ という文字があることを示します。文字を 16 進コードで一致させるには、\x の後に文字の 16 進コードを続けます。{} で囲むこともできます。たとえば、\xf0 や \x{aff} のようになります。後の例は Unicode 文字です。
Word 演算子
以下の演算子は GNU 正規表現ライブラリとの互換性のために提供されています。
\w は ‘word’ 文字クラスのメンバーの任意の 1 文字と一致します。これは、式 [[:word:]] と等価です。
\W は ‘word’ 文字クラスのメンバーではない任意の 1 文字と一致します。これは、式 [^[:word:]] と等価です。
\< は word の先頭のヌル文字列と一致します。
\> は word の末尾のヌル文字列と一致します。
\b は word の先頭または末尾のヌル文字列と一致します。
\B は word 内のヌル文字列と一致します。
照合アルゴリズムに渡されるシーケンスの先頭は、word の先頭であると判断されます。照合アルゴリズムに渡されるシーケンスの末尾は、word の末尾であると判断されます。
バッファー演算子
以下の演算子は GNU 正規表現ライブラリおよび Perl 正規表現との互換性のために提供されています。
``` はバッファーの先頭と一致します。
\A はバッファーの先頭と一致します。
\' はバッファーの末尾と一致します。
\z はバッファーの末尾と一致します。
\Z はバッファーの終端と一致するか、バッファーの終端に続く 1 つ以上の改行文字に一致します。
バッファーは対象の行全体から成ります。
エスケープ演算子
エスケープ文字 ‘\’ にはいくつかの意味があります。
セット宣言の内部では、エスケープに続くものはみな、その通常の意味に関係なくリテラル文字となります。
エスケープ演算子は、後方参照や word 演算子のような演算子を導入します。
エスケープ演算子は、それに続く文字を通常の文字にします。たとえば、‘\*’ は繰り返し演算子ではなくリテラルの ‘*’ を表します。
単一文字のエスケープ シーケンス
以下のエスケープ シーケンスは、単一文字のエイリアスです。
| エスケープ シーケンス | 文字コード | 意味 |
|---|---|---|
\a |
0x07 | Bell 文字 |
\f |
0x0C | フォーム フィード |
\n |
0x0A | 改行文字 |
\r |
0x0D | キャリッジ リターン |
\t |
0x09 | Tab 文字 |
\v |
0x0B | 垂直タブ |
\e |
0x1B | ASCII Escape 文字 |
\0dd |
0dd | 8 進の文字コード。dd は 1 つ以上の 8 進の数字。 |
\xXX |
0xXX | 16 進の文字コード。XX は 1 つ以上の 16 進の数字。 |
\x{XX} |
0xXX | 16 進の文字コード。XX は 1 つ以上の 16 進の数字。オプションで Unicode 文字も使用可能。 |
\cZ |
z-@ | ASCII エスケープ シーケンス Control-Z。Z は '@' の文字コード以上の任意の ASCII 文字。 |
その他のエスケープ シーケンス
以下は、主に Perl 互換のために提供されていますが、\l、\L、\u および \U には若干の違いがあるので注意してください。
\w |
[[:word:]] と等価。 |
\W |
[^[:word:]] と等価。 |
\s |
[[:space:]] と等価。 |
\S |
[^[:space:]] と等価。 |
\d |
[[:digit:]] と等価。 |
\D |
[^[:digit:]] と等価。 |
\l |
[[:lower:]] と等価。 |
\L |
[^[:lower:]] と等価。 |
\u |
[[:upper:]] と等価。 |
\U |
[^[:upper:]] と等価。 |
\C |
任意の 1 文字。'.' と等価。 |
\X |
文字シーケンスと組み合わされた任意の Unicode、たとえば、a\x 0301(アキュートを持つ文字)と一致します。 |
\Q |
引用開始演算子。この後に続くものは、\E 引用終了演算子が現れるまで、すべてリテラル文字として扱われます。 |
\E |
引用終了演算子。\Q で始まったシーケンスを終了します。 |
一致するもの
標準式ライブラリは、最初に一致した文字列に一致します。指定された位置から複数の文字列が一致した場合、最長の文字列と一致します。複数に一致した場合、それらすべてが同じ開始位置で同じ長さの場合、選択されるのは最も長い最初のサブ式に一致したものです。2 つ以上と同様に一致した場合、2 番目のサブ式というように順次調べられます。