構文

用途
REGEXP_SUBSTRは、正規表現パターンで文字列を検索できるようにSUBSTRの機能を拡張したものです。REGEXP_INSTRと似ていますが、このファンクションはサブストリングの位置ではなくサブストリング自体を戻します。このファンクションは、一致文字列の内容のみが必要で、ソース文字列内での位置は必要ない場合に有効です。このファンクションは、文字列をVARCHAR2またはCLOBデータとして、source_charと同じキャラクタ・セットで戻します。
このファンクションは、POSIX正規表現規格およびUnicode Regular Expression Guidelinesに準拠しています。詳細は、付録D「Oracleの正規表現のサポート」を参照してください。
source_charは、検索値として使用される文字式です。通常は文字列であり、データ型はCHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBまたはNCLOBのいずれかです。
patternは正規表現です。通常はテキスト・リテラルであり、データ型はCHAR、VARCHAR2、NCHARまたはNVARCHAR2のいずれかになります。ここには、 512バイトまで入力できます。patternのデータ型がsource_charのデータ型と異なる場合、Oracleはpatternをsource_charのデータ型に変換します。patternで指定できる演算子のリストは、付録D「Oracleの正規表現のサポート」を参照してください。
positionは、Oracleが検索を開始する文字source_charの位置を示す正の整数です。デフォルトは1で、source_charの最初の文字から検索が開始されます。
occurrenceは、source_charに出現するpatternのうちのどれを検索するかを示す正の整数です。デフォルトは1で、最初に出現するpatternが検索されます。
occurrenceが1より大きい場合、1番目のpatternが検出された後に続く1文字目から、2番目(以降)の出現を検索します。この動作は、最初の出現の2番目の文字から2番目の出現を検索するSUBSTRファンクションとは異なります。
match_parameterは、ファンクションのデフォルトの検索動作を変更するためのテキスト・リテラルです。このパラメータの動作は、REGEXP_COUNTのこのファンクションの動作と同じです。詳細は、「REGEXP_COUNT」を参照してください。
部分正規表現のあるpatternの場合、subexprは、ファンクションによって戻されるpattern内の部分正規表現を示す0から9までの負でない整数になります。このパラメータは、REGEXP_INSTRファンクションの場合と同じセマンティクスを持ちます。詳細は、「REGEXP_INSTR」を参照してください。
例
次の例では、文字列を調べて、カンマで区切られた最初のサブストリングを検索します。Oracle Databaseは、後にカンマが付いているカンマでない1つ以上の文字の前にあるカンマを検索します。該当するサブストリングが、前後のカンマを含めて戻されます。
SELECT
REGEXP_SUBSTR('500 Oracle Parkway, Redwood Shores, CA',
',[^,]+,') "REGEXPR_SUBSTR"
FROM DUAL;
REGEXPR_SUBSTR
-----------------
, Redwood Shores,
次の例では、文字列を調べて、1つ以上の英数字を含むサブストリング、および任意でピリオド(.)が続くhttp://を検索します。Oracleは、http://と、スラッシュ(/)または文字列の末尾のいずれかとの間で、3つから4つのこのサブストリングを検索します。
SELECT
REGEXP_SUBSTR('http://www.example.com/products',
'http://([[:alnum:]]+\.?){3,4}/?') "REGEXP_SUBSTR"
FROM DUAL;
REGEXP_SUBSTR
----------------------
http://www.example.com/
次の2つの例では、subexpr引数を使用してpattern内の特定の部分正規表現を戻します。最初の文は、pattern内の最初の部分正規表現を戻します。
SELECT REGEXP_SUBSTR('1234567890', '(123)(4(56)(78))', 1, 1, 'i', 1)
"REGEXP_SUBSTR" FROM DUAL;
REGEXP_SUBSTR
-------------------
123
次の文は、pattern内の4番目の部分正規表現を戻します。
SELECT REGEXP_SUBSTR('1234567890', '(123)(4(56)(78))', 1, 1, 'i', 4)
"REGEXP_SUBSTR" FROM DUAL;
REGEXP_SUBSTR
-------------------
78