パラメーターは、選択する操作に応じて異なります。それらのパラメーターは情報を提供し、結果を保持します。
このルーチンを使用すると、正規表現を使用して文字列を検索できます。
正規表現とは、特定のパターンを持つ文字列を照合するための式です。正規表現の詳細については、お使いのプラットフォームに対応する POSIX 1003.2 標準を参照してください。Windows プラットフォームでは CAtlRegExp ライブラリが使用されており、UNIX プラットフォームでは、このプラットフォームに固有の POSIX C ルーチンが使用されています。
次の手順は、C$REGEXP の使い方を簡単にまとめたものです。
この操作は、ホストで正規表現がサポートされているかどうかを示します。使用法は次のとおりです。
CALL "C$REGEXP" USING AREGEXP-GET-LEVEL GIVING return-value
return-value の値は次のいずれかになります (acucobol.def に定義されている)。
この操作は、正規表現をコンパイルして、有効な形式であることを確認します。有効である場合はコンパイル済み正規表現のハンドルが返され、エラーがある場合は NULL が返されます。使用法は次のとおりです。
CALL "C$REGEXP" USING AREGEXP-COMPILE, reg-expr, flags GIVING return-valueNULL で終了する正規表現である必要があります。NULL で終了する必要があるのは、正規表現では後続空白文字が許容されるからです。(オプション) 次の 1 つ以上の値 (acucobol.def に定義されている) の合計です。
AREGEXP_COMPILE_IGNORECASE | 1 | パターンを照合する際に大文字と小文字の区別を無視します(Windows または UNIX の場合)。 |
AREGEXP_COMPILE_BASIC | 2 | 正規表現の種類を拡張から基本に変更します(UNIX の場合のみ) (拡張および基本については POSIX 1003.2 標準を参照)。 |
AREGEXP_COMPILE_NO_SPECIAL | 4 | すべての文字を、特殊な意味を持たない通常文字として扱います(UNIX の場合のみ)。 |
AREGEXP_COMPILE_NO_SUB | 8 | 照合の際に一致の有無のみを確認し、一致のオフセットを返しません(UNIX の場合のみ)。 |
AREGEXP_COMPILE_NEWLINE | 16 | 改行を特殊文字 (行末マーカー) として扱います(UNIX の場合のみ)。 |
AREGEXP_COMPILE_NO_REGEXP | 32 | reg-expr を正規表現ではなくテキストとして扱います。 |
return-value には、コンパイル済み正規表現のハンドルが含まれます。エラーが発生した場合は NULL が含まれます。
この操作は、正規表現を文字列に適用してハンドルを返します。match-start パラメーターは照合の開始位置を指定するため、AREGEXP-MATCH を開始する前にこのパラメーターを初期化する必要があります。一致の有無を確認するには match-start を調べます。値が0なら一致はありません。使用法は次のとおりです。
CALL "C$REGEXP" USING AREGEXP-MATCH, reg-expr-handle, string, length, match-start, match-end GIVING return-value
reg-expr-handle | AREGEXP-COMPILE によって返された正規表現のハンドルです。 |
string | 一致の有無を調べる文字列です。 |
length | 文字列の長さです。ゼロの場合は文字列のサイズが使用されます。 |
match-start | 入力パラメーターとしては、照合の開始位置を示します。出力パラメーターとしては、一致したパターンの開始インデックスを返します。 |
match-end | 一致したパターンの次のバイトを返します。文字列で追加の一致の有無を調べるには、match-start を match-end に設定してから新しい AREGEXP-MATCH を開始します。 |
return-value | 一致のハンドルが含まれます。一致が見つからなかった場合や、エラーが発生した場合は、ゼロが含まれます。 |
AREGEXP-RELEASE-MATCH (op-code 4)
この操作は、AREGEXP-MATCH が呼び出されたときに割り当てられたメモリを解放します。戻り値は使用されません。使用法は次のとおりです。
CALL "C$REGEXP" USING AREGEXP-RELEASE-MATCH match-handle
この操作は、AREGEXP-COMPILE が呼び出されたときに割り当てられたメモリを解放します。戻り値は使用されません。使用法は次のとおりです。
CALL "C$REGEXP" USING AREGEXP-RELEASE reg-expr-handle
この操作は、正規表現の任意のサブグループに一致したサブストリングの数を返します。使用法は次のとおりです。
CALL "C$REGEXP" USING AREGEXP-NUMGROUPS match-handle GIVING return-value
正規表現の構造によっては、特定のサブグループが複数のサブストリングに一致する可能性があります。この操作は、前回の AREGEXP-MATCH 操作で検出された一致の数を報告します。詳細、ルール、例については、POSIX 1003.2 の文書を参照してください。正規表現に関する書籍も数多く出版されています。
この操作は、AREGEXP-MATCH に渡された文字列の、正規表現の部分式に一致する箇所のインデックスを返します。使用法は次のとおりです。
CALL "C$REGEXP" USING AREGEXP-GETMATCH, match-handle, group, idx-start, idx-end GIVING return-value
パラメーターは、次のように定義されています。
AREGEXP-LAST-ERROR (op-code 20)
この操作は、C$REGEXP の呼び出しで返された最後のエラー コードを返します。使用法は次のとおりです。
CALL "C$REGEXP" USING AREGEXP-LAST-ERROR GIVING return-value
エラー値は return-value で返されます。返される可能性があるエラー値 (acucobol.def に記述されている) の意味は次のとおりです。
AREGEXP-ERROR-NO-ERROR | 0 | エラーなし |
AREGEXP-ERROR-NO-MEMORY | 1 | 要求の処理に必要なメモリが不足している |
AREGEXP-ERROR-BRACE-EXPECTED | 2 | 右中かっこがない |
AREGEXP-ERROR-PAREN-EXPECTED | 3 | 右かっこがない |
AREGEXP-ERROR-BRACKET-EXPECTED | 4 | 右角かっこがない |
AREGEXP-ERROR-UNEXPECTED | 5 | 不明なエラーが発生した |
AREGEXP-ERROR-EMPTY-RANGE | 6 | 空の範囲が渡された |
AREGEXP-ERROR-INVALID-GROUP | 7 | 無効なグループが渡された |
AREGEXP-ERROR-INVALID-RANGE | 8 | 無効な範囲が渡された |
AREGEXP-ERROR-EMPTY-REPEATOP | 9 | 空の部分式で反復演算子が渡された |
AREGEXP-ERROR-INVALID-INPUT | 10 | 入力が無効 |
AREGEXP-ERROR-INVALID-HANDLE | 11 | ハンドルが正規表現または一致のハンドルではない |
AREGEXP-ERROR-INVALID-ARGUMENT | 12 | 渡された引数のいずれかが無効 |
AREGEXP-ERROR-INVALID-CALL-SEQ | 13 | C$REGEXP 操作の順序が無効 |
AREGEXP-ERROR-NO-MATCH | 14 | 指定された文字列に正規表現が一致しない |