ヘッダーをスキップ
Oracle Application Server PL/SQL Web Toolkitリファレンス
10g(10.1.3.1.0)
B31863-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

戻り値:

なし