正規表現を使用して文字列の出現位置を検索する

syntax

REGEXP_INSTR( string , patternOracle 10g
[ , pos [, occurrence [, offset [, match]]]] )
return [ number ]

parameter

string対象の文字列式
pattern正規表現パターン
pos取り出したい文字列の開始位置(1〜)default 1
occurence取り出すまでの検知回数default 1
offset検出文字位置のオフセットdefault 0
match検索パラメータNLS_SORT 依存
sub_pattern_pos取り出すサブパターン位置Oracle 11g

return

  • 抽出した部分文字列の位置(オフセット)を戻す。(1 オリジン)

正規表現パターン

最大で 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 で検索し、その検索文字列が 検知回数 occurence 回目に現れた部分文字列の位置を 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 関連

 
アルファベット別 関数一覧 ショートカット
ABCDEFG
HILMNOP
RSTUVWX
日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ Oracle のライセンスがわからない…
Oracle Direct (ネットで聞いても最後はここで要確認)