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

syntax

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

parameter

string対象の文字列式
pattern正規表現パターン
replace置き換える文字列式
pos検索の開始位置(1〜)default 1
occurrence置き換える検知回数位置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 で検索し、その検索文字列の 置き換える検知回数位置 occurrence 回目の文字列を 文字列式 replace 表記で置き換える。
検知回数 occurrence のデフォルト値は 0 。occurrence = 0 の場合は マッチしたすべての対象を置き換える。

注意

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

REGEXP_REPLACE 使用例

日付文字列を直接ハイフンフォーマットする。

SQL> select
  2   regexp_replace('20191231', '(\d{4})(\d{2})(\d{2})', '\1-\2-\3') yyyymmdd
  3  from dual;
 
YYYYMMDD
----------
2019-12-31

カギ括弧の内部を編集する。最長マッチと最短マッチ。

SQL> select
  2    regexp_replace('[aaa][bbb][ccc]', '\[(.*)\]',  '\1') del_bracket1,
  3    regexp_replace('[aaa][bbb][ccc]', '\[(.*?)\]', '\1') del_bracket2,
  4    regexp_replace('[aaa][bbb][ccc]', '\[(.*?)\]', '\1', 1, 2) del_bracket3
  5  from dual;
 
DEL_BRACKET1               DEL_BRACKET2       DEL_BRACKET3
-------------------------- ------------------ --------------------------
aaa][bbb][ccc              aaabbbccc          [aaa]bbb[ccc]

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
日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ オラクルサポートセンター