ICU 正規表現

ICU 正規表現の実装の詳細についての説明。

この参照コンテンツは、「ICU User Guide」からの抜粋です。このコンテンツでは、ICU 正規表現の実装の詳細について説明します。正規表現の実装方法はプログラミング言語によって多少異なるため、Agent Builder の正規表現機能を使用する場合にはこの情報は重要です。

表 1. 正規表現のメタキャラクター
文字 説明
¥a ベル (¥u0007) に一致します。
¥A 入力の先頭に一致します。¥A は入力内の改行の後とは一致しないため、^ とは異なります。
¥b ([Set] 外部) 現行位置がワード境界の場合に一致します。 境界は、ワード (¥w) と非ワード (¥W) 文字の間の遷移で発生します。結合マークは無視されます。ワード境界について詳しくは、『ICU Boundary Analysis』を参照してください。
¥b ([Set] 内部) バックスペース文字 (¥u0008) に一致します。
¥B 現行位置がワード境界以外の場合に一致します。
¥cX Ctrl-X 文字に一致します。
¥d Unicode 汎用カテゴリー Nd (Number, Decimal Digit) の任意の文字に一致します。
¥D 数字以外のすべての文字に一致します。
¥e エスケープ (¥u001B) に一致します。
¥E 引用符で囲まれたシーケンスの終わりです (¥Q ... ¥E)。
¥f 改ページ文字 (¥u000C) に一致します。
¥G 現行位置が前回の一致の終わりである場合に一致します。
¥n 改行文字 (¥u000A) に一致します。
¥N{UNICODE CHARACTER NAME} 指定された文字に一致します。
¥p{UNICODE PROPERTY NAME} 指定された Unicode プロパティーを持つ任意の文字に一致します。
¥P{UNICODE PROPERTY NAME} 指定された Unicode プロパティーを持たない任意の文字に一致します。
¥Q この文字から ¥E までの間のすべての文字を引用符で囲みます。
¥r 復帰文字 (¥u000D) に一致します。
¥s 空白文字に一致します。空白文字は [¥t¥n¥f¥r¥p{Z}] として定義されます。
¥S 空白文字以外の文字に一致します。
¥t 水平タブ (¥u0009) に一致します。
¥uhhhh 16 進数値 hhhh で表される文字に一致します。
¥Uhhhhhhhh 16 進数値 hhhhhhhh で表される文字に一致します。最大 Unicode コード・ポイントは ¥U0010ffff ですが、8 桁の 16 進数値を正確に指定する必要があります。
¥w 単語構成文字に一致します。単語構成文字は [¥p{Ll}¥p{Lu}¥p{Lt}¥p{Lo}¥p{Nd}] です。
¥W 非単語構成文字に一致します。
¥x{hhhh} 16 進数値 hhhh で表される文字に一致します。1 から 6 桁の 16 進数値を指定できます。
¥xhh 2 桁の 16 進数値 hh で表される文字に一致します。
¥X 書記素クラスターに一致します。
¥Z¥ 現行位置が入力の終わりである場合 (最終行末文字がある場合はさらに最終行末文字より前にある場合) に一致します。
¥z 現行位置が入力の終わりである場合に一致します。
¥n 後方参照。n 番目の捕捉グループに一致する内容に一致します。n は、1 より大きく、パターン内の捕捉グループの総数より小さい値でなければなりません。
注: ICU の正規表現では、8 進数のエスケープ文字 (¥012 など) はサポートされていません。
[pattern] セットの中の任意の 1 文字に一致します。パターンに使用できる文字についての詳細は、UnicodeSet を参照してください。
. 任意の文字に一致します。
^ 行の先頭に一致します。
$ 行の末尾に一致します。
\ この後に続く文字を引用符で囲みます。 リテラルとして扱われるために引用符で囲む必要がある文字は、* ? + [ ( ) { } ^ $ | ¥ . / です。
表 2. 正規表現の演算子
オペレーター 説明
| 選択演算子。A|BA または B のいずれかに一致します。
* 0 回以上の繰り返しに一致します。最多一致。
+ 1 回以上の繰り返しに一致します。最多一致。
? 0 回または 1 回の繰り返しに一致します。1 回が優先されます。
{n} 正確に n 回の繰り返しに一致します。
{n,} n 回以上の繰り返しに一致します。最多一致。
{n,m} n 回から m 回の繰り返しに一致します。最多一致 (最大 m 回)。
*? 0 回以上の繰り返しに一致します。最少一致。
+? 1 回以上の繰り返しに一致します。最少一致。
?? 0 回または 1 回の繰り返しに一致します。0 回が優先されます。
{n}? 正確に n 回の繰り返しに一致します。
{n,}? n 回から、パターン全体の一致に必要な回数までの繰り返しに一致します。
{n,m}? n 回から m 回の繰り返しに一致します。最少一致 (最小 n 回)。
*+ 0 回以上の繰り返しに一致します。1 番目の繰り返しが検出された時点での最多一致です。全体的な一致が失敗した場合でも、少ない数で再試行しないでください (所有的一致)。
++ 1 回以上の繰り返しに一致します。所有的一致。
?+ 0 回または 1 回の繰り返しに一致します。所有的一致。
{n}+ 正確に n 回の繰り返しに一致します。
{n,}+ n 回以上の繰り返しに一致します。所有的一致。
{n,m}+ n 回から m 回の繰り返しに一致します。所有的一致。
( ... ) 捕捉括弧。この一致の後、括弧内の副次式に一致する範囲の入力が使用可能になります。
(?: ... ) 非捕捉括弧。組み込まれているパターンをグループ化しますが、一致テキストの捕捉は行われません。捕捉括弧より効果的です。
(?> ... ) アトミック・グループを囲む括弧。括弧内の副次式との最初の一致のみが試行されます。全体的なパターン一致にならない場合は、「(?>」の前の位置との一致の検索がバックアップされます。
(?# ... ) 自由形式のコメント (?# comment )
(?= ... ) 先読みアサーション。括弧内のパターンが現行の入力位置に一致するが、入力位置が先に進まない場合は true です。
(?! ... ) 否定先読みアサーション。括弧内のパターンが現行の入力位置に一致しない場合は true です。入力位置が先に進みません。
(?<= ... ) 後読みアサーション。括弧内のパターンが現在の入力位置より前のテキストに一致する場合は true となります。一致の最終文字は、現在位置の直前の入力文字です。入力位置は変更されません。後読みパターンに一致するストリングの長さは、アンバインドされていてはなりません (* または + 演算子なし)。
(?<!...) 否定後読みアサーション。括弧内のパターンが現在の入力位置より前のテキストに一致しない場合に、true になります。一致の最終文字は、現在位置の直前の入力文字です。入力位置は変更されません。 後読みパターンに一致するストリングの長さは、アンバインドされていてはなりません (* または + 演算子なし)。
(?ismx-ismx: ... ) フラグ設定。括弧で囲んだ式と指定されたフラグ (有効または無効) が評価されます。
(?ismx-ismx) フラグ設定。フラグ設定を変更します。変更は、この設定の後に続くパターンの部分に適用されます。例えば (?i) は大/小文字を区別しない一致に変更されます。

置換テキスト

検索/置換操作の置換テキストには、検索の捕捉グループ・テキストへの参照を含めることができます。参照は $n という形式で指定します。この n は、捕捉グループの番号です。
表 3. 置換テキストの文字
文字 説明
$n 定位置捕捉グループ n のテキストが $n に置換されます。n0 以上で、捕捉グループの数以下である必要があります。$ の後に数字が指定されていない場合の特別な効果はありません。これは、代替テキストで文字 $ 自体として表示されます。
\ この文字はリテラルとして扱われ、特別な効果はありません。代替テキストで円記号によるエスケープが必要であるのは「$」と「¥」のみです。ただし、他の文字に対して円記号を使用しても、悪影響はありません。
$@n 捕捉グループ n のテキストが、捕捉グループ n に一致する正規表現に置換されます。n は、>0 以上で、捕捉グループの数以下である必要があります。$@ の後に数字が指定されていない場合の特別な効果はありません。これは、代替テキストで文字 $@ 自体として表示されます。
$#n 一致した捕捉グループ n のテキストが、$#n に代入されます。n は 0 以上で、一致した捕捉グループの数以下である必要があります。$# の後に数字が指定されていない場合の特別な効果はありません。これは、代替テキストで文字 $# 自体として表示されます。

フラグ・オプション

正規表現突き合わせのさまざまな特性を制御するフラグを以下に示します。式を RegexPattern オブジェクトにコンパイルする時点でフラグ値を指定することができます。あるいは、(?ismx-ismx) パターン・オプションを使用してパターン自体の中でフラグ値を指定できます。
表 4. フラグ・オプション
フラグ (パターン) フラグ (API 定数) 説明
i UREGEX_CASE_INSENSITIVE 設定されている場合、突き合わせでは大/小文字が区別されません。
x UREGEX_COMMENTS 設定されている場合、パターン内で空白文字と # コメントを使用できます。
s UREGEX_DOTALL 設定されている場合、パターン内の「.」は入力テキストの行終了文字と一致します。デフォルトでは一致しません。テキスト中では、復帰/改行のペアは単一行終了文字として動作し、RE パターン内の 1 つの「.」に一致します。
m UREGEX_MULTILINE パターン内の「^」および「$」の動作を制御します。デフォルトでは、これらのパターンはそれぞれ、入力テキストの開始と終了に一致します。 このフラグが設定されている場合、「^」と「$」は入力テキストの各行の開始と終了にも一致します。