REGEXP_LIKE 述部

REGEXP_LIKE 述部は、ストリングで正規表現パターンを検索します。

構文図を読む構文図をスキップする
>>-REGEXP_LIKE--(--source-string--,--pattern-expression--------->

>--+----------+--+----------+--)-------------------------------><
   '-,--start-'  '-,--flags-'      

pattern-expression が見つかった場合、結果は真です。 pattern-expression が見つからない場合、結果は偽です。 source-stringpattern-expression が空ストリングの場合は、結果は真です。 source-string または pattern-expression のいずれか一方が空ストリングの場合、結果は偽です。 いずれかの引数の値が NULL の場合、結果は未知になります。

source-string
その中で検索が行われるストリングを指定する式。 式は、組み込み文字ストリング、グラフィック・ストリング、数値、日時のいずれかのデータ・タイプの値を戻す必要があります。 値が UTF-16 DBCLOB ではない場合、正規表現パターンを検索する前に、暗黙的に UTF-16 DBCLOB にキャストされます。 FOR BIT DATA 属性の文字ストリングと、バイナリー・ストリングはサポートされません。 ストリングの長さが 1 GB を超えてはなりません。
pattern-expression
検索パターンの正規表現ストリングを指定する式。 式は、組み込み文字ストリング、グラフィック・ストリング、数値、日時のいずれかのデータ・タイプの値を戻す必要があります。 値が UTF-16 DBCLOB ではない場合、正規表現パターンを検索する前に、暗黙的に UTF-16 DBCLOB にキャストされます。 FOR BIT DATA 属性の文字ストリングと、バイナリー・ストリングはサポートされません。 ストリングの長さが 32K を超えてはなりません。

有効な pattern-expression は、検索のパターンを記述する文字および制御文字のセットで構成されます。 有効な制御文字の説明については、正規表現の制御文字 を参照してください。

start
検索が開始される source-string 内の位置を指定する式。 式は任意の組み込み数値、文字ストリング、またはグラフィック・ストリングのデータ・タイプの値を戻す必要があります。 引数は、正規表現パターンを検索する前に INTEGER にキャストされます。INTEGER への変換について詳しくは、INTEGER または INTを参照してください。整数の値は、1 以上でなければなりません。整数の値が source-string の実際の長さより大きい場合、述部の結果は偽です。
flags
パターン・マッチングの特性を制御するフラグを指定する式。式は、組み込み文字ストリングまたはグラフィック・ストリングのいずれかのデータ・タイプの値を戻す必要があります。FOR BIT DATA 属性の文字ストリングと、バイナリー・ストリングはサポートされません。 このストリングには、1 つ以上の有効なフラグ値を含めることができます。 フラグ値の組み合わせは有効でなければなりません。 空ストリングは、値「c」と同じです。

有効なフラグ文字の説明については、正規表現のフラグ値 を参照してください。

正規表現のフラグ値

次の表では、サポートされるフラグ値について説明します。
表 1. フラグ値
フラグ値 説明
c マッチングで大文字小文字が区別されることを指定します。 これは、「c」および「i」のいずれも指定されていない場合のデフォルト値です。 この値を値「i」と一緒に指定してはなりません。
i マッチングで大文字小文字が区別されないことを指定します。 この値を値「c」と一緒に指定してはなりません。
m 入力データが複数の行を含む可能性があることを指定します。 デフォルトでは、パターン内の「^」および「$」はそれぞれ、入力ストリングの開始と終了にのみ一致します。 このフラグが設定されている場合、「^」と「$」は入力ストリングの各行の開始と終了にも一致します。
n パターン内の文字「.」は入力ストリングの行終了文字に一致することを指定します。 デフォルトでは、パターン内の「.」は行終了文字に一致しません。 入力ストリング内の復帰と改行 (LF) のペアは、単一の行終了文字として振る舞い、パターン内の単一の「.」と一致します。
s パターン内の文字「.」は入力ストリングの行終了文字に一致することを指定します。 これは、値「n」の同義語です。
x エスケープされない限り、パターン内の空白文字は無視されることを指定します。

正規表現の制御文字

正規表現の処理は、 International Components for Unicode (ICU) 正規表現 API を使用して、以下にリストした制御文字を使用した正規表現パターンを含む Unicode データに対して実行されます。

半角文字のみが認識されることに注意してください。 これらの表にある文字に対応する全角文字はどれも認識されません。

表 2. 正規表現のメタキャラクター
文字 セットの外部 [セットの内部] 説明
¥a ベル文字、¥u0007 にマッチします。
¥A   入力の先頭にマッチします。¥A は、入力内の改行の後にはマッチしない点で、^ と異なります。
\b   現在位置がワード境界の場合にマッチします。 境界は、単語文字 (¥w) と非単語文字 (¥W) の間の移行部で発生し、結合文字は無視されます。
¥B   現在位置がワード境界ではない場合にマッチします。
¥cX CTRL-X 文字にマッチします。
¥d Unicode 一般カテゴリーが Nd (数字、10 進数字) である任意の文字にマッチします。
¥D 10 進数字ではない任意の文字にマッチします。
¥e エスケープ文字、¥u001B にマッチします。
¥E ¥Q ... ¥E の引用符で囲まれたシーケンスを終了します。
¥f 用紙送り、¥u000C にマッチします。
¥G   現在位置が前回のマッチの終わりである場合にマッチします。
¥n 改行、¥u000A にマッチします。
¥N{UNICODE CHARACTER NAME} 名前付き文字にマッチします。
¥p{UNICODE PROPERTY NAME} 指定された Unicode プロパティーを持つ任意の文字にマッチします。
¥P{UNICODE PROPERTY NAME} 指定された Unicode プロパティーを持たない任意の文字にマッチします。
¥Q ¥E までの後続のすべての文字を引用符で囲みます。
¥r 復帰、¥u000D にマッチします。
¥s 空白文字にマッチします。空白文字は、[¥t¥n¥f¥r¥p{Z}] として定義されます。
¥S 非空白文字にマッチします。
¥t 水平タブ、¥u0009 にマッチします。
¥uhhhh 16 進値が hhhh である文字にマッチします。
¥Uhhhhhhhh 16 進値が hhhhhhhh である文字にマッチします。 最大 Unicode コード・ポイントが ¥U0010ffff である場合でも、正確に 8 桁の 16 進数字を指定する必要があります。
¥w
単語文字にマッチします。単語文字は、
[¥p{Alphabetic}¥p{Mark}¥p{Decimal_Number}
¥p{Connector_Punctuation}¥u200c¥u200d] です。
¥W 非単語文字にマッチします。
¥x{hhhh} 16 進値が hhhh である文字にマッチします。 1 桁から 6 桁の 16 進数字を指定できます。
¥xhh 2 桁の 16 進値が hh である文字にマッチします。
¥X   書記素クラスターにマッチします。
\Z   現在位置が入力の終わりであるが、最後の行終了文字 (存在する場合) の前である場合にマッチします。
¥z   現在位置が入力の終わりである場合にマッチします。
¥n   後方参照。n 番目のキャプチャー・グループがマッチするたびにマッチします。 n は 1 より大きく、かつパターン内のキャプチャー・グループの総数より小さい数でなければなりません。
¥0ooo 8 進文字にマッチします。 'ooo' は 1 桁から 3 桁の 8 進数字です。 0377 が、許容される最大の 8 進文字です。 先行ゼロが必要です。これにより、 8 進定数と後方参照を区別します。
[pattern] セットからの任意の 1 文字にマッチします。
.   任意の文字にマッチします。
^   行の先頭にマッチします。
$   行の終わりにマッチします。
\   後続文字を引用符で囲みます。リテラルとして処理するために引用符で囲む必要がある文字は、以下のものです。 * ? + [ ( ) { } ^ $ | ¥ .
\   後続文字を引用符で囲みます。リテラルとして処理するために引用符で囲む必要がある文字は、[ ] ¥ です。状況によっては引用符で囲まなければならない場合がある文字は、- & です。
表 3. 正規表現の演算子
演算子 説明
| 代替。A|B は、A または B のどちらかにマッチします。
* 0 回以上、マッチします。できる限り多くの回数のマッチが行われます。
+ 1 回以上、マッチします。できる限り多くの回数のマッチが行われます。
? 0 回または 1 回、マッチします。1 回が優先されます。
{n} 正確に n 回、マッチします。
{n,} 少なくとも n 回、マッチします。できる限り多くの回数のマッチが行われます。
{n,m} n 回から m 回までマッチします。できる限り多くの回数のマッチが行われますが、m 回を超えることはありません。
*? 0 回以上、マッチします。できる限り少ない回数のマッチが行われます。
+? 1 回以上、マッチします。できる限り少ない回数のマッチが行われます。
?? 0 回または 1 回、マッチします。0 回が優先されます。
{n}? 正確に n 回、マッチします。
{n,}? 少なくとも n 回のマッチが行われますが、パターン全体のマッチに必要な回数は超えません。
{n,m}? n 回から m 回までマッチします。できる限り少ない回数のマッチが行われますが、n 回より少ないことはありません。
*+ 0 回以上、マッチします。1 つ目の検出時にできる限り多くの回数のマッチを行い、全体としてのマッチに失敗してもマッチ回数が少なくなる再試行は行われません (強欲なマッチ)。
++ 1 回以上、マッチします。強欲なマッチです。
?+ 0 回または 1 回、マッチします。強欲なマッチです。
{n}+ 正確に n 回、マッチします。
{n,}+ 少なくとも n 回、マッチします。強欲なマッチです。
{n,m}+ n 回から m 回までマッチします。強欲なマッチです。
( ... ) キャプチャー括弧。括弧で囲まれた副次式にマッチした入力の範囲が、マッチ後に使用可能になります。
(?: ... ) 非キャプチャー括弧。含まれるパターンをグループ化しますが、マッチするテキストのキャプチャーは行われません。 キャプチャー括弧よりも、いくらか効率が良くなります。
(?> ... ) アトミック・マッチ括弧。括弧で囲まれた副次式の 1 つ目のマッチが、試行される唯一のマッチです。それによりパターン全体のマッチが発生しない場合は、「(?>」の前の位置にマッチの検索をバックアップします。
(?# ... ) フリー形式のコメント (?# コメント)。
(?= ... ) 先読みアサーション。括弧で囲まれたパターンが現在の入力位置にマッチする場合に真ですが、入力位置を前に移動しません。
(?! ... ) 負の先読みアサーション。括弧で囲まれたパターンが現在の入力位置にマッチしない場合に真です。 入力位置を前に移動しません。
(?<= ... ) 後読みアサーション。括弧で囲まれたパターンが現在の入力位置より前のテキストにマッチし、マッチの最後の文字が現在位置の直前の入力文字である場合に真です。 入力位置を変更しません。後読みパターンがマッチする有効なストリングの長さは、無制限であってはなりません (* 演算子も + 演算子もないこと)。
(?<! ... ) 負の後読みアサーション。括弧で囲まれたパターンが現在の入力位置より前のテキストにマッチせず、マッチの最後の文字が現在位置の直前の入力文字である場合に真です。 入力位置を変更しません。後読みパターンがマッチする有効なストリングの長さは、無制限であってはなりません (* 演算子も + 演算子もないこと)。
(?ismwx-ismwx: ... ) フラグの設定。指定されたフラグの有効化または無効化によって、括弧で囲んだ式を評価します。
(?ismwx-ismwx) フラグの設定。フラグの設定を変更します。変更は、設定の後ろのパターンの一部分に適用されます。 例えば、(?i) は、大/小文字を区別しないマッチに変更します。
表 4. セット式 (文字クラス)
説明
[abc] 文字 a、b、または c のどれにもマッチします。
[^abc] 否定 - a、b、および c を除く任意の文字にマッチします。
[A-M] 範囲 - A から M までの任意の文字にマッチします。 含まれる文字は、Unicode コード・ポイントの順序によって決まります。
[¥u0000-¥U0010ffff] 範囲 - すべての文字にマッチします。
[¥p{Letter}]
[¥p{General_Category=Letter}]
[\p{L}]
Unicode カテゴリー = Letter の文字。示されたすべての形式は同等です。
[¥P{Letter}] 否定プロパティー。(大文字 ¥P) Letter 以外のすべてにマッチします。
[¥p{numeric_value=9}] 数値 9 を含むすべての数にマッチします。 セット式で任意の Unicode プロパティーを使用できます。
[¥p{Letter}&&¥p{script=cyrillic}] 論理 AND または論理積。すべてのキリル文字のセットにマッチします。
[¥p{Letter}--¥p{script=latin}] 減算。ラテン以外のすべての文字にマッチします。
[[a-z][A-Z][0-9]]
[[a-zA-Z0-9]]
暗黙的論理 OR または和集合。これらの例は、ASCII 文字と数字にマッチします。2 つの形式は同等です。
[:script=Greek:] プロパティーの POSIX に似た代替構文。 ¥p{script=Greek} と同等です。

前提条件: REGEXP_LIKE 述部を使用するには、 International Components for Unicode (ICU) オプションがインストールされていなければなりません。

処理: 正規表現の処理は、 International Components for Unicode (ICU) 正規表現インターフェースを使用して行われます。 詳しくは、http://userguide.icu-project.org/strings/regexp を参照してください。

3 つの引数のみが指定された場合、 3 番目の引数は、start 引数または flags 引数の可能性があります。 3 番目の引数がストリングの場合は、flags 引数として解釈されます。 それ以外の場合は、start 引数として解釈されます。

  • 例 1: EMPLOYEE 表から姓のスペルが LUCCHESSI、LUCHESSI、または LUCHESI である従業員番号を選択します。大文字小文字は考慮しません。
    SELECT EMPNO FROM EMPLOYEE 
     WHERE REGEXP_LIKE(LASTNAME,'luc+?hes+?i','i')
    結果は、EMPNO 値 '000110' の 1 行です。
  • 例 2: PRODUCT 表からすべての無効なプロダクト ID 値を選択します。 予期される形式は 'nnn-nnn-nn' で、'n' は 0 から 9 の数字です。
    SELECT PID FROM PRODUCT 
     WHERE NOT REGEXP_LIKE(pid,'[0-9]{3}-[0-9]{3}-[0-9]{2}')
    すべてのプロダクト ID がパターンにマッチするため、結果は 0 行です。