正規表現を使用して文字列の置換をする
REGEXP_REPLACE | ( string , pattern |
| [ , replace [ , pos [, occurrence [, match]]]]] ) |
return [ string ] | |
string | 対象の文字列式 | |
pattern | 正規表現パターン | |
replace | 置き換える文字列式 | |
pos | 検索の開始位置(1〜) | default 1 |
occurrence | 置き換える検知回数位置 | default 0 |
match | 検索パラメータ | NLS_SORT 依存 |
正規表現パターン
最大で 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 関連