正規表現を使用して文字列の置換をする

syntax

REGEXP_REPLACE( string , pattern
[ , replace [ , pos [, occurrence [, match]]]]] ) Oracle 10g
return [ string ]

parameter

string対象の文字列式
pattern正規表現パターン
replace置き換える文字列式
pos検索の開始位置(1〜)default 1
occurence置き換える検知回数位置default 0
match検索パラメータNLS_SORT 依存

return

  • 正規表現によって置換された文字列

正規表現パターン

最大で 512 バイトまでの正規表現 ⇒ 正規表現パターン 参照

置き換える文字列式(後方参照)

正規表現の部分一致(部分正規表現)を含んだ文字列式を指定する。部分正規表現は後方参照を \n という形式で指定する。n は 1 〜 9 までに制限される。部分一致の記述個数は 500 まで。

検索パラメータ

デフォルト値は大文字小文字の区別は 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_REPLACE 関数の内容

文字列 string 中の検索開始位置 pos から 正規表現パターン文字列 pattern で検索し、その検索文字列の 置き換える検知回数位置 occurence 回目の文字列を 文字列式 replace 表記で置き換える。
検知回数 occurence のデフォルト値は 0 。occurence = 0 の場合は マッチしたすべての対象を置き換える。

注意

Perl による拡張表現 を使用する場合、例えば \d を指定したとき Perl では最長マッチになるが REGEXP_* では 最短マッチ となる。

REGEXP_REPLACE 使用例

URL 文字列 str をドメイン部分とファイル部分に分ける。

SQL> set null '<NULL>'
SQL> select str, ptn, rep, regexp_replace(str, ptn, rep) reg_replace
  2   from regexp_replace_sample;
 
STR                                 PTN                             REP REG_REPLACE
----------------------------------- ------------------------------- --- ---------------
http://biz.rivus.jp/dir/file.html   http://([[a-z.]+)([a-z./]+)     \1  biz.rivus.jp
http://biz.rivus.jp/dir/file.html   http://([[a-z.]+)([a-z./]+)     \2  /dir/file.html
http://biz.rivus.jp/dir/file.html   http://([[a-z.]+)([a-z./]+)     \0  \0
https://biz.rivus.jp/dir/file.html  http[s]?://([[a-z.]+)([a-z./]+) \1  biz.rivus.jp

大文字小文字を無視する 'i' オプションを使用

SQL> select str, ptn, rep, regexp_replace(str, ptn, rep, 1, 1, 'i') reg_replace
  2   from regexp_replace_sample;
 
STR                                 PTN                          REP REG_REPLACE
----------------------------------- ---------------------------- --- ---------------
http://BIZ.rivus.jp/DIR/File.html   http://([[a-z.]+)([a-z./]+)  \1  BIZ.rivus.jp
http://biz.rivus.jp/DIR/File.html   http://([[a-z.]+)([a-z./]+)  \2  /DIR/File.html


SQL 関数 - REGEXP_REPLACE 関連

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