正規表現

本書では、 IBM® TPF Toolkitで正規表現を指定するために使用される構文について説明します。

正規表現は、テキストの特定の部分で突き合わせる必要があるパターンを指定する場合に使用します。 IBM TPF Toolkit には、特定のテキストを検出するための正規表現を指定できる領域がいくつかあります。 例:
  • リモート・コンソールでの検索: リモート・コンソールでは、正規表現を使用して特定のメッセージ ID が含まれるすべてのメッセージを検索できます。
  • フィルターでの検索: ここでは、正規表現を指定して 'p' で始まるすべてのファイルを検索することができます。

正規表現の構成の要約

構文 一致
文字  
X 文字 x
\\ 円記号
\0n 8 進値を持つ文字0n (0 < = n < = 7)
\0nn 8 進値を持つ文字0nn (0 < = n < = 7)
\0MNN 8 進値を持つ文字0mnn (0 < = m < = 3、0 < = n < = 7)
\xhh 16 進値を持つ文字0xhh
\uふーん 16 進値を持つ文字0xふーん
\t タブ文字 ('\u0009')
\n 改行 (line feed) 文字 ('\u000A')
\r キャリッジ・リターン文字 ('\u000D')
\f フォーム・フィード文字 ('\u000C')
\a アラート (ベル) 文字 ('\u0007')
\e エスケープ文字 ('\u001B')
\cX x に対応する制御文字
文字クラス  
[abc] a,bまたはc(単純クラス)
[^abc] 次の文字を除く任意の文字a,bまたはc(否定)
[a-zA-Z] aからzまたはAからZ、包括的 (範囲)
[a-d[m-p]] aからdまたはmからp:[a-dm-p](組合)
[a-z&&[def]] d,eまたはf(交差点)
[a-z&&[^bc]] aからz、以下を除くbおよびc:[ad-z](減算)
[a-z&&[^m-p]] aからz、およびそうでないmからp:[a-lq-z](減算)
定義済みの文字クラス  
. 任意の文字 (行の終了文字と一致することもあれば、一致しないこともある)
\d 数字:[0-9]
\D 非数字の場合:[^0-9]
\s 空白文字は以下のとおりです。[ \t\n\x0B\f\r]
\S 空白文字以外の文字:[^\s]
\w ワード文字:[a-zA-Z_0-9]
\W 非単語構成文字:[^\w]
POSIX 文字クラス (US-ASCII のみ)  
\p{Lower} 小文字の英字:[a-z]
\p{Upper} 大文字の英字は、以下のとおりです。[A-Z]
\p{ASCII} すべての ASCII:[\x00-\x7F]
\p{Alpha} 英字は、以下のとおりです。[\p{Lower}\p{Upper}]
\p{Digit} 10 進数字:[0-9]
\p{Alnum} 英数字:[\p{Alpha}\p{Digit}]
\p{Punct} 句読点: 以下のいずれか!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
\p{Graph} 可視文字:[\p{Alnum}\p{Punct}]
\p{Print} 印刷可能文字:[\p{Graph}\x20]
\p{Blank} スペースまたはタブの場合:[ \t]
\p{Cntrl} 制御文字:[\x00-\x1F\x7F]
\p{XDigit} 16 進数字:[0-9a-fA-F]
\p{Space} 空白文字は以下のとおりです。[ \t\n\x0B\f\r]
境界マッチャー  
^ 行の始まり
$ 行の終わり
\b ワード境界
\B 非ワード境界
\A 入力の始まり
\G 以前のマッチングの終わり
\Z もしあれば、最終終止符以外の入力の終わり
\z 入力の終わり
欲張り数量詞  
X? X、1 回または全くなし
X* X、ゼロ回以上
X+ X、1 回以上
X{n} X、正確に n
X{n,} Xn 回以上
X{n,m} Xn 回以上で m 回以下
控えめ数量詞  
X?? X、1 回または全くなし
X*? X、ゼロ回以上
X+? X、1 回以上
X{n}? X、正確に n
X{n,}? Xn 回以上
X{n,m}? Xn 回以上で m 回以下
所有格数量詞  
X?+ X、1 回または全くなし
X*+ X、ゼロ回以上
X++ X、1 回以上
X{n}+ X、正確に n
X{n,}+ Xn 回以上
X{n,m}+ Xn 回以上で m 回以下
論理演算子  
XY X に続いて Y
X|Y X または Y のどちらか
(X) X、キャプチャー・グループとして
逆参照  
¥n 一致したグループをキャプチャーする任意の nth
引用符  
\ なし、ただし後続の文字を引用符で囲む
\Q なし。ただし、すべての文字を引用符で囲みます。\E
\E なし。ただし、すべての文字を引用符で囲みます。\Q
特別な構文 (非キャプチャー)  
(?:X) X、非キャプチャー・グループとして
(?idmsux-idmsux) なし、ただし一致フラグ i d m s u x をオン - オフにする
(?idmsux-idmsux:X) X、規定のフラグ i d m s u x がオン - オフの状態の非キャプチャー・グループとして
(?=X) X、ゼロ幅の正の先読みで
(?!X) X、ゼロ幅の負の先読みで
(?<=X) X、ゼロ幅の正の後読みで
(?<!X) X、ゼロ幅の負の後読みで
(?>X) X、独立した、キャプチャーでないグループ

バックスラッシュ、エスケープ、および引用符

バックスラッシュ文字 ('\') 上記の表で定義されているように、エスケープされた構成を導入するとともに、エスケープされていない構成として解釈される文字を引用します。 したがって、次の式は、\\単一の円記号と一致します。\{左中括弧と一致します。

エスケープされた構成を表していない英字の前にバックスラッシュを使用するとエラーになります。これらは、正規表現言語の将来の拡張用に予約されています。 バックスラッシュは、その文字がエスケープされていない構成の一部であるかどうかにかかわらず、非英字文字の前に使用できます。

正規表現を表すストリング・リテラルではバックスラッシュを二重にする必要があります。 ストリング・リテラル"\b"例えば、正規表現として解釈されると、単一のバックスペース文字に一致します。"\\b"ワード境界と一致します。 ストリング・リテラル"\(hello\)"は正しくなく、コンパイル時エラーになります。ストリング (hello) をストリング・リテラルと突き合わせるために、"\\(hello\\)"使用する必要があります。

文字クラス

文字クラスは、他の文字クラス内に現れることができ、共用体演算子 (暗黙) と交差演算子 (&&)。 共用体演算子は、少なくとも 1 つのオペランド・クラスにあるすべての文字を含むクラスを表します。 論理積演算子は、どの文字も両方のオペランド・クラスに含まれるクラスを表します。

文字クラスの優先順位は高いものから順に次のようになります。
  1. リテラル・エスケープ\x
  2. グループ化[...]
  3. 範囲a-z
  4. 和集合[a-e][i-u]
  5. 交差点[a-z&&[aeiou]]

さまざまなセットのメタキャラクターは、文字クラスの外部ではなく、内部で有効であることに注意してください。 例えば、次の正規表現があるとします。.文字クラス内の特殊な意味を失いますが、式は-メタキャラクターを形成する範囲になります。

行終了文字

行終了文字は、入力文字シーケンスの行の末尾をマークする 1 文字または 2 文字のシーケンスです。 次の文字が行終了文字として認識されます。
  • 改行文字 (改行文字) ('\n'),
  • 復帰文字の直後に改行文字が続く ("\r\n"),
  • 独立したキャリッジ・リターン文字 ('\r'),
  • 次の行の文字 ('\u0085'),
  • 行の区切り文字 ('\u2028')、または
  • パラグラフ区切り文字 ('\u2029).

正規表現^および$行終了文字を無視し、入力シーケンス全体の先頭と末尾にのみ一致します。

グループおよびキャプチャー

キャプチャー・グループには、左から右方向へ左括弧をカウントすることによって、番号が付けられます。 式の中((A)(B(C)))例えば、以下の 4 つのグループがあります。
  1. ((A)(B(C)))
  2. (A)
  3. (B(C))
  4. (C)
グループ・ゼロは必ず、表現全体を表します。

キャプチャー・グループは、一致の際に そのようなグループに一致する入力シーケンスのサブシーケンスが保存されるため、そのように呼ばれます。 取り込まれたサブシーケンスは、後方参照を使用して、式の後の方で使用することができます。 また、一致操作が完了したら、マッチャーから取得することもできます。

グループと関連付けられ、取り込まれた入力は必ず、グループが最後に一致したサブシーケンスになります。 数量化のためにグループが 2 回目に評価される場合、2 回目の評価が失敗すると、以前に取り込まれた値 (存在する場合) は保持されます。 ストリングの突き合わせ"aba"式に対して(a(b)?)+例えば、グループ 2 を次のように設定したままにします。"b"取り込まれたすべての入力は、各一致の先頭で破棄されます。

次で始まるグループ(?テキストをキャプチャーせず、グループ合計にカウントされない純粋な 非キャプチャー ・グループです。