CALL "C$REGEXP" USING OP-CODE, parameters GIVING return-value
コード | 操作 |
---|---|
1 | AREGEXP-GET-LEVEL |
2 | AREGEXP-COMPILE |
3 | AREGEXP-MATCH |
4 | AREGEXP-RELEASE-MATCH |
5 | AREGEXP-RELEASE |
6 | AREGEXP-NUMGROUPS |
7 | AREGEXP-GETMATCH |
20 | AREGEXP-LAST-ERROR |
パラメーターは、選択する操作に応じて異なります。それらのパラメーターは情報を提供し、結果を保持します。
各操作は、特に明記されていない限り、戻り値で値または状態を返します。戻り値の内容は、操作およびその結果によって異なります。
このルーチンを使用すると、正規表現を使用して文字列を検索できます。
正規表現とは、特定のパターンを持つ文字列を照合するための式です。正規表現の詳細については、お使いのプラットフォームに対応する POSIX 1003.2 標準を参照してください。Windows プラットフォームでは CAtlRegExp ライブラリが使用されており、UNIX プラットフォームでは、このプラットフォームに固有の POSIX C ルーチンが使用されています。
次の手順は、C$REGEXP の使い方を簡単にまとめたものです。
AREGEXP-GET-LEVEL (op-code 1)
この操作は、ホストで正規表現がサポートされているかどうかを示します。使用法は次のとおりです。
CALL "C$REGEXP" USING AREGEXP-GET-LEVEL GIVING return-value
return-value の値は次のいずれかになります (acucobol.def に定義されている)。
AREGEXP-NONE | 0 | 正規表現を処理できない |
AREGEXP-WINDOWS | 1 | Windows の正規表現がサポートされている |
AREGEXP-POSIX | 2 | POSIX の正規表現がサポートされている |
AREGEXP-COMPILE (op-code 2)
この操作は、正規表現をコンパイルして、有効な形式であることを確認します。有効である場合はコンパイル済み正規表現のハンドルが返され、エラーがある場合は NULL が返されます。使用法は次のとおりです。
CALL "C$REGEXP" USING AREGEXP-COMPILE, reg-expr, flags GIVING return-value
reg-expr
NULL で終了する正規表現である必要があります。NULL で終了する必要があるのは、正規表現では後続の空白文字が許容されるからです。flags
(オプション) 次の 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 が含まれます。
AREGEXP-MATCH (op-code 3)
この操作は、正規表現を文字列に適用してハンドルを返します。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
match-handle | AREGEXP-MATCH によって返された一致のハンドルです。 |
AREGEXP-RELEASE (op-code 5)
この操作は、AREGEXP-COMPILE が呼び出されたときに割り当てられたメモリを解放します。戻り値は使用されません。使用法は次のとおりです。
CALL "C$REGEXP" USING AREGEXP-RELEASE reg-expr-handle
reg-expr-handle | AREGEXP-COMPILE によって返された正規表現のハンドルです。 |
AREGEXP-NUMGROUPS (op-code 6)
この操作は、正規表現の任意のサブグループに一致したサブストリングの数を返します。使用法は次のとおりです。
CALL "C$REGEXP" USING AREGEXP-NUMGROUPS match-handle GIVING return-value
match-handle | AREGEXP-MATCH によって返されたハンドルです。 |
return-value | 一致の数を返します。 |
正規表現の構造によっては、特定のサブグループが複数のサブストリングに一致する可能性があります。この操作は、前回の AREGEXP-MATCH 操作で検出された一致の数を報告します。詳細、ルール、例については、POSIX 1003.2 の文書を参照してください。正規表現に関する書籍も数多く出版されています。
AREGEXP-GETMATCH (op-code 7)
この操作は、AREGEXP-MATCH に渡された文字列の、正規表現の部分式に一致する箇所のインデックスを返します。使用法は次のとおりです。
CALL "C$REGEXP" USING AREGEXP-GETMATCH, match-handle, group, idx-start, idx-end GIVING return-value
パラメーターは、次のように定義されています。
match-handle | AREGEXP-MATCH によって返されたハンドルです。 |
group | 1 から AREGEXP-NUMGROUPS によって返される値までの数値です。 |
idx-start | 正規表現の部分式に一致する文字列の先頭のインデックスを返します。 |
idx-end | 正規表現の部分式に一致する文字列の末尾のインデックスを返します。 |
return-value | 操作が成功した場合は 1、エラーが発生した場合はゼロを返します。 |
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 | 指定された文字列に正規表現が一致しない |