正規表現を使用して文字列の編集、部分文字列を取り出す

syntax

REGEXP_SUBSTR( string , pattern
[ , position [, occurrence [, match_param]]] ) Oracle 10g
return [ string ]

parameter

string対象の文字列式
pattern正規表現パターン
position取り出したい文字列の開始位置(1〜)default 1
occurrence取り出すまでの検知回数default 1
match_param検索パラメータNLS_SORT 依存
sub_pattern_pos取り出すサブパターン位置Oracle 11g

return

  • 抽出した部分文字列 (Substring)

正規表現パターン

最大で 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 関連

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