正規表現を使用して文字列の編集、部分文字列を取り出す
正規表現パターン
最大で 512 バイトまでの正規表現 ⇒ 正規表現パターン 参照
※ 正規表現パターンに Perl による拡張表現 を使用する場合、例えば \d を指定したとき Perl では最長マッチになるが 各種 REGEXP シリーズ では 最短マッチ となる。
検索パラメータ
デフォルト値は大文字小文字の区別は NLS_SORT パラメータ 依存、それ以外は「設定なし」の状態となる。
'cimnx' のように複数のパラメータ指定できるが、競合する設定は左から右に向かって設定が上書きされる。
match_param | 検索方法 |
c | 大文字小文字を区別する(Case sensitive) |
i | 大文字小文字を区別しない(case Insensitive [or Ignore]) |
m | ^$ メタ記号を各行の先頭と末尾に一致させる(Multiple lines) |
n | メタ記号のドット(.) を改行にも一致させる(Newline) |
x | 空白を取り除いて評価する(eXcluding white-space?:Oracle 10g R2) |
REGEXP_SUBSTR 関数の内容
文字列 string 中の検索開始位置 position から 正規表現パターン文字列 pattern で検索し、その検索文字列が 検知回数 occurrence 回目に現れた部分文字列を戻す。
REGEXP_SUBSTR は 文字列を式から 正規表現を用いて「パターン検索」し 「部分文字列を切り出す」という関数であるため、引数の構成が文字列を検索する INSTR 関数 や REGEXP_INSTR 関数 と似通っている。
注意
SUBSTR 関数 と異なり 検索開始位置 position に 0 以下の値を設定するとエラーになる。
REGEXP_SUBSTR 使用例
(1 行目) 大文字の文字列で始まり、任意で小文字だけを含むパターンで構成される文字を取り出す。
(2 行目) 小文字 4文字 の文字列を取り出す。
SQL> select str, ptn, regexp_substr(str, ptn) regex_sub
2 from regexp_substr_sample;
STR PTN REGEX_SUB
------------ ------------------------------ --------------------
xxxABCzzz [[:upper:]]+[[:lower:]]* ABCzzz
abcDEFghij [[:lower:]]{4} ghij
(1 行目) 最初に見つかった 「こんにちは」、または、「こんばんは」 を戻す。
(2 行目) 2番目に見つかった 「〜同上〜」 を戻す。
SQL> select str, ptn, pos, oc, regexp_substr(str, ptn, pos, oc) regex_sub
2 from regexp_substr_sample2;
STR PTN POS OC REGEX_SUB
------------------------------------ -------------------- ---- ---- ----------
おはよう?こんにちは?こんばんは? こん(ばん|にち)は 1 1 こんにちは
おはよう?こんにちは?こんばんは? こん(ばん|にち)は 1 2 こんばんは
SQL 関数 - REGEXP_SUBSTR 関連