ヘッダーをスキップ
Oracle Fusion Middleware PL/SQL Web Toolkitリファレンス
11gリリース1(11.1.1)
B56250-01
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

6 owa_patternパッケージ

PL/SQL Web Toolkitのowa_patternパッケージは、文字列内でテキストのパターンを検索し、一致した文字列を別の文字列に置き換えます。このパッケージのサブプログラムでは正規表現を使用します。

6.1 サブプログラム

正規表現: この項では、正規表現の構成で使用する特殊文字、数量詞、およびフラグについて説明します。

owa_pattern.amatchファンクション: 文字列に指定されたパターンが含まれるかどうかを判定します。一致を検索する文字列内の場所を指定できます。

owa_pattern.changeファンクションおよびプロシージャ: 文字列内のパターンを置き換えます。ファンクションとしてコールされた場合は、発見されて置換された正規表現の数を返します。

owa_pattern.getpatプロシージャ: VARCHAR2型からパターンのデータ型を生成します。

owa_pattern.matchファンクション: 文字列に指定されたパターンが含まれるかどうかを判定します。

owa_pattern.patternデータ型: 正規表現を格納するデータ型です。

これらのサブプログラムはオーバーロードされます。つまり、各サブプログラムには複数のバージョンがあり、使用するパラメータによって区別されます。具体的には、MATCHには6つのバージョン、AMATCHとCHANGEには4つのバージョンがあります。サブプログラムでは次のパラメータを使用します。

6.2 正規表現

様々なワイルドカード・トークンや数量詞を使用して検索する文字列を作成することで、正規表現を指定します。

6.2.1 ワイルドカード・トークン

ワイルドカード・トークンは、ワイルドカード・トークン以外のものと一致します。

表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を参照。


6.2.2 数量詞

&以外のトークンは、次のいずれかの数量詞を使用して意味を拡張できます。これらの数量詞はリテラルにも適用できます。

表6-2では各数量詞を定義します。

表6-2 数量詞

数量詞 説明
?

0または1回

*

0回以上

+

1回以上

{n}

n

(n,}

n回以上

{n,m}

n回以上でm回以下


6.2.3 フラグ

owa_patternのファンクションおよびプロシージャでは、ターゲットおよび正規表現以外にも、フラグを使用してその解釈方法を変更できます。

表6-3ではフラグを定義します。

表6-3 フラグ

フラグ 説明
i

大/小文字を区別しない検索を示す。

g

CHANGEに対してのみ適用される。グローバルな置換を示す。つまり、正規表現と一致するターゲットのすべての部分が置換される。


6.3 owa_pattern.amatchファンクション

文字列内の特定の位置でパターンが発生するかどうかを指定します。このファンクションには4つのバージョンがあります。

表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の先頭から数えた値。一致するものがなかった場合は、0が返される。


6.4 owa_pattern.changeファンクションおよびプロシージャ

文字列または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: 大/小文字を区別して検索するかどうか、および変更をグローバルに行うかどうか。「i」を指定すると、検索で大/小文字を区別しない。「g」を指定すると、すべての一致に対して変更が行われる。指定しない場合、最初の一致を置換した後でファンクションは停止する。

戻り値:

ファンクションの場合、置換回数が返される。フラグ「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

6.5 owa_pattern.getpatプロシージャ

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データ型

戻り値:

なし


6.6 owa_pattern.matchファンクション

文字列に指定されたパターンが含まれるかどうかを判定します。このパターンには正規表現を使用できます。オーバーラップする複数の文字列が正規表現と一致する場合は、最も長く一致する文字列が取得されます。

このファンクションの正規表現としては、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は、正規表現zoo.*を検索するターゲット。ピリオドは改行以外の任意の文字を表し、アスタリスクは前にある文字の0回以上の出現と一致する。この例では、改行以外の任意の文字と一致する。

したがって、この正規表現では、一致するターゲットは、zooと、それに続いて、改行で終了しない、または改行を含んでいない(改行はピリオドと一致しない)、一連の任意の文字から構成されていることを指定している。フラグiは、検索で大/小文字を無視することを示す。この例では、ファンクションはTRUEを返し、一致するものが見つかったことを示す。

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;

6.7 owa_pattern.patternデータ型

patternは、入力パラメータと出力パラメータの両方で使用できます。したがって、1回の解析のみで、同じ正規表現をOWA_PATTERNのファンクション・コールに渡すことができます。

表6-8では、owa_pattern.patternデータ型のプロパティを定義します。

表6-8 owa_pattern.patternデータ型

プロパティ 定義

構文:

owa_pattern.pattern - data type

戻り値:

なし