REGEXP_REPLACE

说明

根据一定规则替换字符串中的数据

语法

regexp_replace ::=

occurrence_and_match_param ::=

参数

source_char

源字符串 字符类型

pattern

正则表达式模式

replace_string

要替换的字符串

position

原字符串的起始位置

occurrence

从第几个开始匹配

match_param

要替换字符串方式的支持

i:大小写不敏感;

c:大小写敏感;

n:点号 . 不匹配换行符号;

m:多行模式;

x:扩展模式,忽略正则表达式中的空白字符;

u: 使用unicode字符集。

返回值

根据规则替换之后的字符串

示例

根据正则表达式规则进行替换

--  清理环境
DROP TABLE test_regexp_replace CASCADE;

--创建表
create table test_regexp_replace
(
  id varchar(4),
  value varchar(20)
);
--数据插入
insert into test_regexp_replace values('1','213-555-022311');
insert into test_regexp_replace values('2','213-555-022411');
insert into test_regexp_replace values('3','213-555-022511');
insert into test_regexp_replace values('4','213-555-022611');
insert into test_regexp_replace values('5',convert_encoding_using('你好世界', 'utf8'));

--使用REGEXP_REPLACE 把前3 个数字放在圆括号内,同时省略第一个‘-’符号。为此,
--我们将第1 个数字集称为 \1,第2 个数据集称为 \2,第3 个数据集称为\3

select REGEXP_REPLACE (value,  '([[:digit:]]{3})-([[:digit:]]{3})-([[:digit:]]{4})'  , '(\1) \2-\3'  )  
    "REGEXP_REPLACE"  from test_regexp_replace where id < 5;
REGEXP_REPLACE(text)      |
--------------------------
(213) 555-022311          |
--------------------------
(213) 555-022411          |
--------------------------
(213) 555-022511          |
--------------------------
(213) 555-022611          |
总数目:4


--修改value子串中以 utf8 编码保存的中文字符串。
select REGEXP_REPLACE(value,'[\x{4e00}-\x{9fa5}]+',convert_encoding_using('世界你好', 'utf8'),1,1,'u') from test_regexp_replace where id = 5;
REGEXP_REPLACE(text)      |
--------------------------
世界你好                      |
总数目:1

--  删除表
DROP TABLE test_regexp_replace;