構文
用途
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