C$REGEXP

このルーチンを使用すると、正規表現を使用して文字列を検索できます。

注: This ACUCOBOL-GT library routine is available in this COBOL version. Any compatibility issues in this COBOL system are in the Compatibility Issues section at the end of the topic.

使用方法

CALL "C$REGEXP" 
    USING OP-CODE, parameters
    GIVING return-value

パラメーター

実行する操作を指定します。各操作は acucobol.def に定義されています。詳細はこの後に説明します。op-code には次のものがあります。
コード 操作
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 の使い方を簡単にまとめたものです。

  1. op-code の AREGEXP-GET-LEVEL を使用して、ホスト プラットフォームで正規表現がサポートされていることを確認します。
  2. op-code の AREGEXP-COMPILE を使用して、使用する正規表現を検証およびコンパイルします。正規表現でエラーが検出された場合のために、プログラムにエラー処理ルーチンが含まれている必要があります。
  3. op-code の AREGEXP-MATCH を使用して、コンパイル済みの正規表現を文字列に適用して一致を検索します。この操作を繰り返して、文字列内のすべての一致を検索することもできます。
  4. op-code の AREGEXP-NUMGROUPS および AREGEXP-GETMATCH を使用して、部分式の一致を処理します。
  5. op-code の AREGEXP-RELEASE-MATCH および AREGEXP-RELEASE を使用して、このルーチンによって使用されたメモリを解放します。

op-code とパラメーター

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    指定された文字列に正規表現が一致しない
注: 返されたエラー コードがこのリストに含まれていない場合は、ホストの正規表現ライブラリの値である可能性があります。ホストの正規表現ライブラリの説明書を参照してください。

互換性の問題

なし。