222 OWA_PATTERN
OWA_PATTERNパッケージは、文字列からテキスト・パターンを検索し、一致した文字列を他の文字列と置換するためのインタフェースを提供します。
参照:
このパッケージの実装の詳細は、次を参照してください。
この章の内容は次のとおりです。
222.1 OWA_PATTERNのタイプ
パターンは、入力および出力パラメータの両方に使用できます。したがって、1回の解析のみで、同じ正規表現をOWA_PATTERN
のファンクション・コールに渡すことができます。
-
OWA_PATTERN.PATTERN
222.2 OWA_PATTERNの操作上のノート
OWA_PATTERNサブプログラムがオーバーロードされています。具体的には、6つのバージョンのMATCH
と、AMATCH
およびCHANGE
が4つずつあります。
サブプログラムでは次のパラメータを使用します。
-
line
- 一致の検査対象となるターゲット。複数行のテキストまたはowa_text.multi_lineデータ・タイプの場合があります。 -
pat
- サブプログラムがline内で検出しようとするパターン。このパターンには正規表現を含めることができます。owa_pattern.changeファンクションおよびプロシージャでは、このパラメータはfrom_str
と呼ばれます。 -
flags
- 検索で大文字小文字を区別するのか、または置換を全体に対して実行するのかを指定します。
このパッケージのサブプログラムでは正規表現を使用します。正規表現を指定する場合は、一致させる文字列を、各種ワイルドカード・トークンおよび数量詞も含めて作成します。
222.2.1 OWA_PATTERNのワイルドカード
ワイルドカード・トークンは、ワイルドカード・トークン以外のものと一致します。
表222-1 OWA_PATTERNパッケージによって認識されるワイルドカード・トークン
トークン | 説明 |
---|---|
|
改行またはターゲットの先頭に一致します。 |
|
改行またはターゲットの末尾に一致します。 |
|
改行に一致します。 |
|
改行以外のすべての文字に一致します。 |
|
タブに一致します。 |
|
数字(0から9)に一致します。 |
|
数字以外(0から9以外)に一致します。 |
|
言語文字(0から9、aからz、AからZ、または_)に一致します。 |
|
非言語文字(0から9、aからz、AからZ、または_以外)に一致します。 |
|
空白文字(ブランク、タブまたは改行)に一致します。 |
|
非空白文字(ブランク、タブまたは改行以外)に一致します。 |
|
単語の境界(\wから\Wの間)に一致します。 |
|
2つの16進数から構成される現在の文字セットの値に一致します。 |
|
2つまたは3つの8進数から構成される現在の文字セットの値に一致します。 |
|
別のケースで使用されない任意の文字が続き、この文字に一致します。 |
|
|
222.2.2 OWA_PATTERNの数量詞
&
以外のすべてのトークンは、次の数量詞のいずれかを使用して意味を拡張させることができます。これらの数量詞はリテラルにも適用できます。
表222-2 数量詞
数量詞 | 説明 |
---|---|
|
0または1回の出現。 |
|
0回以上の出現。 |
|
1回以上の出現。 |
|
正確にn回の出現。 |
|
少なくともn回の出現。 |
|
n回以上、m回以下の出現。 |
222.3 OWA_PATTERNサブプログラムの要約
この表は、OWA_PATTERNサブプログラムを示し、簡単に説明しています。
表222-4 OWA_PATTERNパッケージのサブプログラム
サブプログラム | 説明 |
---|---|
文字列に指定のパターンが含まれるかどうかを判定します。文字列内のどこに一致するかを指定できます。 |
|
文字列内のパターンを置換します。ファンクションとしてコールした場合は、正規表現が検出されて置換された回数が戻されます。 |
|
|
|
文字列に指定のパターンが含まれるかどうかを判定します。 |
222.3.1 AMATCHファンクション
このファンクションは、パターンが文字列内の特定の位置に出現するかどうかを指定します。
このファンクションには4つのバージョンがあります。
-
このファンクションの1番目および2番目のバージョンでは、一致したトークンを保存しません(これらのトークンは、3番目および4番目のバージョンにある
backrefs
パラメータに保存されます)。1番目と2番目のバージョンの違いは、pat
パラメータにVARCHAR2
を指定できるのか、またはパターン・データ・タイプを指定できるのかという点です。 -
このファンクションの3番目および4番目のバージョンでは、一致したトークンを
backrefs
パラメータに保存します。3番目と4番目のバージョンの違いは、pat
パラメータにVARCHAR2を指定できるのか、またはパターン・データ・タイプを指定できるのかという点です。ノート:
複数のオーバーラップした文字列が正規表現に一致する場合、このファンクションは最長の一致を採用します。
構文
OWA_PATTERN.AMATCH( line IN VARCHAR2, from_loc IN INTEGER, pat IN VARCHAR2, flags IN VARCHAR2 DEFAULT NULL) RETURN INTEGER; OWA_PATTERN.AMATCH( line IN VARCHAR2, from_loc IN INTEGER, pat IN OUT PATTERN, flags IN VARCHAR2 DEFAULT NULL) RETURN INTEGER; OWA_PATTERN.AMATCH( line IN VARCHAR2 from_loc IN INTEGER pat in varchar2 backrefs OUT owa_text.vc_arr flags IN VARCHAR2 DEFAULT NULL) RETURN INTEGER; OWA_PATTERN.AMATCH( line IN VARCHAR2 from_loc IN INTEGER pat IN OUT PATTERN backrefs OUT owa_text.vc_arr flags IN VARCHAR2 DEFAULT NULL) RETURN INTEGER;
パラメータ
表222-5 AMATCHファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
検索するテキスト。 |
from_loc |
検索を開始する |
|
一致させる文字列。正規表現を含めることが可能。 |
backrefs |
一致したテキスト。一致した各トークンは、 |
flags |
検索で大文字と小文字を区別するかどうかを指定します。このパラメータの値が"i"の場合、検索で大文字と小文字を区別しません。これを指定していない場合は、検索で大文字と小文字を区別します。 |
戻り値
一致したものの末尾に続く文字のインデックス。line
の先頭から計算されます。一致するものがなかった場合は、0
が返されます。
222.3.2 CHANGEファンクションおよびプロシージャ
このファンクションまたはプロシージャは、文字列またはmulti_line
データ・タイプを検索して置換します。複数のオーバーラップした文字列が正規表現に一致する場合、このサブプログラムは最長の一致を採用します。
構文
OWA_PATTERN.CHANGE( line IN OUT VARCHAR2, from_str IN VARCHAR2, to_str IN VARCHAR2, flags IN VARCHAR2 DEFAULT NULL) RETURN INTEGER; OWA_PATTERN.CHANGE( line IN OUT VARCHAR2, from_str IN VARCHAR2, to_str IN VARCHAR2, flags IN VARCHAR2 DEFAULT NULL); owa_pattern.change( mline IN OUT owa_text.multi_line, from_str IN VARCHAR2, to_str IN VARCHAR2, flags IN VARCHAR2 DEFAULT NULL) RETURN INTEGER; OWA_PATTERN.CHANGE( mline IN OUT owa_text.multi_line, from_str IN VARCHAR2, to_str IN VARCHAR2, flags IN VARCHAR2 DEFAULT NULL);
パラメータ
表222-6 CHANGEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
検索するテキスト。このパラメータの出力値は、変更された文字列です。 |
mline |
検索するテキスト。これは |
|
置換する正規表現。 |
to_str |
置換えパターン。 |
flags |
検索で大文字と小文字を区別するか、さらに変更を全体に対して実行するかどうかを指定します。" |
戻り値
ファンクションとして使用した場合は、置換を実行した回数を戻します。フラグ"g"が使用されていない場合、この数は0または1のみで、最初に一致したもののみが置換されます。フラグ"g"が指定されると、正規表現と一致したものをすべて置換します。
例
OWA_PATTERN.CHANGE('Cats in pajamas', 'C.+in', '& red ')
この正規表現は、サブストリング"Cats
in
"に一致します。次に、この文字列を"& red"で置換します。アンパサンド文字"&
"は、正規表現に一致するため、"Cats
in
"を示します。このように、このプロシージャは文字列"Cats
in
pajamas
"を"Cats
in
red
"で置換します。これをプロシージャではなくファンクションとしてコールした場合、戻り値は1となります。これは、置換が1回実行されたことを示します。
例2:
CREATE OR REPLACE PROCEDURE test_pattern as theline VARCHAR2(256); num_found INTEGER; BEGIN theline := 'what is the goal?'; num_found := OWA_PATTERN.CHANGE(theline, 'goal', 'idea', 'g'); HTP.PRINT(num_found); -- num_found is 1 HTP.PRINT(theline); -- theline is 'what is the idea?' END; / SHOW ERRORS
222.3.3 GETPATプロシージャ
このプロシージャは、VARCHAR2文字列をOWA_PATTERN.PATTERN
データ・タイプに変換します。
構文
OWA_PATTERN.GETPAT( arg IN VARCHAR2, pat IN OUT pattern);
パラメータ
表222-7 GETPATプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
変換する文字列。 |
pat |
|
222.3.4 MATCHファンクション
このファンクションは、文字列に指定のパターンが含まれるかどうかを判定します。このパターンには正規表現を含めることができます。複数のオーバーラップした文字列が正規表現に一致する可能性がある場合、このファンクションは最長の一致を採用します。
構文
owa_pattern.match( line IN VARCHAR2, pat IN VARCHAR2, flags IN VARCHAR2 DEFAULT NULL) RETURN BOOLEAN; owa_pattern.match( line IN VARCHAR2, pat IN OUT PATTERN, flags IN VARCHAR2 DEFAULT NULL) RETURN BOOLEAN; owa_pattern.match( line IN VARCHAR2, pat IN VARCHAR2, backrefs OUT owa_text.vc_arr, flags IN VARCHAR2 DEFAULT NULL) RETURN BOOLEAN; OWA_PATTERN.MATCH( line IN VARCHAR2, pat IN OUT PATTERN, backrefs OUT owa_text.vc_arr, flags IN VARCHAR2 DEFAULT NULL) RETURN BOOLEAN; owa_pattern.match( mline IN owa_text.multi_line, pat IN VARCHAR2, rlist OUT owa_text.row_list, flags IN VARCHAR2 DEFAULT NULL) RETURN BOOLEAN; OWA_PATTERN.MATCH( mline IN owa_text.multi_line, pat IN OUT pattern, rlist OUT owa_text.row_list, flags IN VARCHAR2 DEFAULT NULL) RETURN BOOLEAN;
パラメータ
表222-8 MATCHファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
検索する行。 |
|
検索するテキスト。これは |
|
一致させるパターン。これは、 |
|
一致したテキスト。一致した各トークンは、 |
|
一致のリストを含む出力パラメータ。 |
|
検索で大文字と小文字を区別するかどうかを指定します。このパラメータの値が"i"の場合、検索で大文字と小文字を区別しません。これを指定していない場合は、検索で大文字と小文字を区別します。 |
戻り値
一致するものが検出された場合はTRUE
、検出されない場合はFALSE
です。
例
KAZOO
は、zoo.*
という正規表現を検索するターゲットです。ピリオドは改行以外のすべての文字を表し、アスタリスクは0個以上の先行の文字に一致します。この場合、改行以外のすべての文字に一致します。
そのため、この正規表現は、一致ターゲットがzoo
および後続の任意の文字列から構成され、改行で終わったり改行を含んだりしない(ピリオドと一致しないため)ものであることを示します。iフラグは、検索時に大文字小文字の区別を無視することを示します。この場合、このファンクションはTRUE
を戻し、一致するものが検出されたことを示します。
boolean foundMatch; foundMatch := owa_pattern.match('KAZOO', 'zoo.*', 'i');
次の例では、sometext
内で"goal"の後にいくつかの文字が続く文字列を検索します。検出された場合は、次のようになります。
sometext VARCHAR2(256); pat VARCHAR2(256); sometext := 'what is the goal?' pat := 'goal.*'; IF OWA_PATTERN.MATCH(sometext, pat) THEN HTP.PRINT('Match found'); ELSE HTP.PRINT('Match not found'); END IF;
操作上のノート
-
このファンクションの正規表現には、
VARCHAR2
またはOWA_PATTERN.PATTERN
データ
・タイプのいずれかを使用できます。
OWA_PATTERN.GETPAT
プロシージャを使用して、文字列からAN OWA_PATTERN.PATTERN
データ・タイプを作成します。 -
OWA_TEXT.STREAM2MULTI
プロシージャを使用して、長い文字列からMULTI_LINE
データ・タイプを作成します。
multi_line
を使用する場合、rlist
パラメータには一致するものが検出されたチャンクのリストを指定します。 -
行が
multi_line
ではなく文字列の場合、backrefs
と呼ばれるオプションの出力パラメータを追加できます。このパラメータはrow_list
で、ターゲット内で正規表現の一連のトークンが一致した各文字列を含みます。