正規表現を使用して文字列の出現位置を検索する
正規表現パターン
最大で 512 バイトまでの正規表現 ⇒ 正規表現パターン 参照
検出文字位置のオフセット
デフォルトでは正規表現で検出した文字列の位置を戻す。 このオフセットに 1 をセットすると、次の文字の位置を戻す。
検索パラメータ
デフォルト値は大文字小文字の区別は 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_INSTR 関数の内容
文字列 string 中の検索開始位置 pos から 正規表現パターン文字列 pattern で検索し、その検索文字列が 検知回数 occurrence 回目に現れた部分文字列の位置を 1 オリジンで戻す。 offset が 1 の場合には +1 される。
注意
Perl による拡張表現 を使用する場合、例えば \d を指定したとき Perl では最長マッチになるが REGEXP_* では 最短マッチ となる。
REGEXP_SUBSTR 同様 INSTR 関数 と同じように 検索開始位置 pos に 0 以下の値を設定するとエラーになる。
REGEXP_INSTR 使用例
文字列 str から 3桁 の数値を探し出す。1行目では 1番目に見つかった位置情報、2行目では 2番目…
SQL> select str, ptn, pos, ocr, regexp_instr(str, ptn, pos, ocr) instr_pos
2 from regexp_instr_sample;
STR PTN POS OCR INSTR_POS
-------------------- -------- ---------- ---------- ----------
000-111-222-333-444 \d{3} 1 1 1
000-111-222-333-444 \d{3} 1 2 5
000-111-222-333-444 \d{3} 1 3 9
000-111-222-333-444 \d{3} 1 4 13
大カッコ([]) 内のキャレット(^) と 大カッコの外側のキャレットの違い
大カッコ内では「後続文字以外 = NOT」 の意味になり、大カッコの外では「先頭文字」の意味になる。
STR PTN POS OCR INSTR_POS
-------------------- -------- ---------- ---------- ----------
000-111-222-333-444 ^[0-9] 1 1 1
000-111-222-333-444 ^[0-9] 1 2 0
000-111-222-333-444 [^0-9] 1 1 4
000-111-222-333-444 [^0-9] 1 2 8
SQL 関数 - REFEXP_INSTR 関連