PL/SQL Web Toolkitのowa_patternパッケージは、文字列内でテキストのパターンを検索し、一致した文字列を別の文字列に置き換えます。このパッケージのサブプログラムでは正規表現を使用します。
正規表現: この項では、正規表現の構成で使用する特殊文字、数量詞、およびフラグについて説明します。
owa_pattern.amatchファンクション: 文字列に指定されたパターンが含まれるかどうかを判定します。一致を検索する文字列内の場所を指定できます。
owa_pattern.changeファンクションおよびプロシージャ: 文字列内のパターンを置き換えます。ファンクションとしてコールされた場合は、発見されて置換された正規表現の数を返します。
owa_pattern.getpatプロシージャ: VARCHAR2型からパターンのデータ型を生成します。
owa_pattern.matchファンクション: 文字列に指定されたパターンが含まれるかどうかを判定します。
owa_pattern.patternデータ型: 正規表現を格納するデータ型です。
これらのサブプログラムはオーバーロードされます。つまり、各サブプログラムには複数のバージョンがあり、使用するパラメータによって区別されます。具体的には、MATCHには6つのバージョン、AMATCHとCHANGEには4つのバージョンがあります。サブプログラムでは次のパラメータを使用します。
line: 一致を検査する対象です。複数行のテキストまたはowa_text.multi_lineデータ型の場合があります。
pat: サブプログラムがline中で検索するパターンです。このパターンには正規表現を使用できます。owa_pattern.changeファンクションおよびプロシージャでは、このパラメータはfrom_strという名前になっています。
flags: 検索で大/小文字を区別するかどうか、または置換をグローバルに行うかどうかを指定します。
様々なワイルドカード・トークンや数量詞を使用して検索する文字列を作成することで、正規表現を指定します。
ワイルドカード・トークンは、ワイルドカード・トークン以外のものと一致します。
表6-1では各ワイルドカード・トークンを定義します。
表6-1 owa_patternパッケージが認識するワイルドカード・トークン
トークン | 説明 |
---|---|
^ |
改行またはターゲットの先頭と一致する。 |
$ |
改行またはターゲットの最後と一致する。 |
\n |
改行と一致する。 |
. |
改行以外の任意の文字と一致する。 |
\t |
タブと一致する。 |
\d |
数字(0〜9)と一致する。 |
\D |
数字以外(0〜9以外)と一致する。 |
\w |
単語文字(0〜9、a〜z、A〜Z、または_)と一致する。 |
\W |
単語文字以外(0〜9、a〜z、A〜Z、または_以外)と一致する。 |
\s |
空白文字(ブランク、タブまたは改行)と一致する。 |
\S |
空白文字以外(ブランク、タブまたは改行以外)と一致する。 |
\b |
単語境界(\wと\Wの間)と一致する。 |
\x<HEX> |
現行キャラクタ・セットにおける16進数2桁の値と一致する。 |
\<OCT> |
現行キャラクタ・セットにおける8進数2桁または3桁の値と一致する。 |
\ |
別の方法でその文字との一致を指定できない任意の文字の前に付ける。 |
& |
CHANGEに対してのみ適用される。これを使用すると、正規表現と一致した文字列を、それと置換する文字列に挿入可能。このトークンは、ターゲットの一致方法ではなく、ターゲットの変更方法を指定する点が、他のトークンと異なる。このトークンの詳細は、CHANGEを参照。 |
文字列内の特定の位置でパターンが発生するかどうかを指定します。このファンクションには4つのバージョンがあります。
1番目と2番目のバージョンは、一致したトークンを保存しません(3番目と4番目のバージョンでは、一致したトークンはbackrefsパラメータに保存されます)。1番目と2番目のバージョンの違いは、patパラメータです。このパラメータのデータ型は、VARCHAR2またはpatternです。
このファンクションの3番目と4番目のバージョンは、一致したトークンをbackrefsパラメータに保存します。3番目と4番目のバージョンの違いは、patパラメータです。このパラメータのデータ型は、VARCHAR2またはpatternです。
注意: オーバーラップする複数の文字列が正規表現と一致する場合は、最も長く一致する文字列が取得されます。 |
表6-4では、owa_pattern.amatchファンクションのプロパティを定義します。
表6-4 owa_pattern.amatchファンクション
プロパティ | 定義 |
---|---|
構文: |
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; |
|
パラメータ: |
line: 検索対象のテキスト。 from_loc: 検索を開始するline内の位置(文字数で指定)。 pat: 検索する文字列。正規表現を含めることが可能。データ型はVARCHAR2またはpattern。patternの場合、このパラメータの出力値は一致したパターン。 backrefs: 一致したテキスト。一致した各トークンは、owa_text.vc_arrデータ型のPL/SQL表のセルに格納される。 flags: 検索で大/小文字を区別するかどうか。このパラメータの値が「i」の場合、検索で大/小文字を区別しない。それ以外の場合は大/小文字が区別される。 |
戻り値: |
一致が終了した後の文字の索引。lineの先頭から数えた値。一致するものがなかった場合は、 |
文字列またはmulti_lineデータ型を検索して置換します。オーバーラップする複数の文字列が正規表現と一致する場合は、最も長く一致する文字列が取得されます。
表6-5では、owa_pattern.changeファンクションおよびプロシージャのプロパティを定義します。
表6-5 owa_pattern.changeファンクションおよびプロシージャ
プロパティ | 定義 |
---|---|
構文: |
/* function */ owa_pattern.change( line in out varchar2 from_str in varchar2 to_str in varchar2 flags in varchar2 DEFAULT NULL) return integer; |
/* procedure */ owa_pattern.change( line in out varchar2 from_str in varchar2 to_str in varchar2 flags in varchar2 DEFAULT NULL); |
|
/* function */ 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; |
|
/* procedure */ owa_pattern.change( mline in out owa_text.multi_line from_str in varchar2 to_str in varchar2 flags in varchar2 DEFAULT NULL); |
|
パラメータ: |
line: 検索対象のテキスト。このパラメータの出力値は、変更された文字列。 mline: 検索対象のテキスト。これは、owa_text.multi_lineデータ型。このパラメータの出力値は、変更された文字列。 from_str: 置換する正規表現。 to_str: 発見された文字列と置き換えるパターン。 flags: 大/小文字を区別して検索するかどうか、および変更をグローバルに行うかどうか。「 |
戻り値: |
ファンクションの場合、置換回数が返される。フラグ「g」を使用しないと、この数は0または1のみで、最初に一致したもののみが置換される。フラグ「g」を指定すると、正規表現と一致するものはすべて置換される。 |
例: |
例1: owa_pattern.change('Cats in pajamas', 'C.+in', '& red ') 正規表現はサブストリング「Cats in」と一致する。一致したサブストリングは、文字列「& red」と置き換えられる。アンパサンド文字(&)は正規表現と一致したものなので、「Cats in」を示す。したがって、文字列「Cats in pajamas」は、「Cats in red pajamas」に置換される。これをプロシージャではなくファンクションとしてコールすると、返される値は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 |
VARCHAR2の文字列をowa_pattern.patternデータ型に変換します。
表6-6では、owa_pattern.getpatプロシージャのプロパティを定義します。
表6-6 owa_pattern.getpatプロシージャ
プロパティ | 定義 |
---|---|
構文: |
owa_pattern.getpat(arg in VARCHAR2, pat in out pattern); |
パラメータ: |
arg: 変換する文字列。 pat: argで初期化されたowa_pattern.patternデータ型。 |
戻り値: |
なし |
文字列に指定されたパターンが含まれるかどうかを判定します。このパターンには正規表現を使用できます。オーバーラップする複数の文字列が正規表現と一致する場合は、最も長く一致する文字列が取得されます。
このファンクションの正規表現としては、VARCHAR2またはowa_pattern.patternデータ型を使用できます。文字列からowa_pattern.patternデータ型を作成するには、owa_pattern.getpatプロシージャを使用します。
長い文字列からmulti_lineデータ型を作成するには、owa_text.stream2multiプロシージャを使用します。multi_lineを使用した場合、rlistパラメータにより、検索された一致部分のリストが示されます。
lineが文字列でmulti_lineではない場合は、backrefsという名前のオプションの出力パラメータを追加できます。このパラメータはrow_listで、正規表現の一連のトークンと一致したターゲット内の各文字列を保持します。
表6-7では、owa_pattern.matchファンクションのプロパティを定義します。
表6-7 owa_pattern.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; |
|
パラメータ: |
line: 検索対象のテキスト。 mline: 検索対象のテキスト。これは、owa_text.multi_lineデータ型。 pat: 検索パターン。VARCHAR2データ型またはowa_pattern.patternデータ型。patternの場合、このパラメータの出力値は一致したパターン。 backrefs: 一致したテキスト。一致した各トークンは、owa_text.vc_arrデータ型のPL/SQL表のセルに格納される。このパラメータはrow_listで、正規表現の一連のトークンと一致したターゲット内の各文字列を保持する。 rlist: 一致した文字列のリストを含む出力パラメータ。 flags: 検索で大/小文字を区別するかどうか。このパラメータの値が「i」の場合、検索で大/小文字を区別しない。それ以外の場合は大/小文字が区別される。 |
戻り値: |
一致するものが検索された場合はTRUE、検索されない場合はFALSE。 |
例: |
KAZOOは、正規表現 したがって、この正規表現では、一致するターゲットは、 boolean foundMatch; foundMatch := owa_pattern.match('KAZOO', 'zoo.*', 'i'); 次に示す例では、「goal」の後に任意の文字が0回以上繰り返される文字列を、sometext内で検索する。 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; |
patternは、入力パラメータと出力パラメータの両方で使用できます。したがって、1回の解析のみで、同じ正規表現をOWA_PATTERNのファンクション・コールに渡すことができます。
表6-8では、owa_pattern.patternデータ型のプロパティを定義します。