括号以外的字符(不包含括号)替换
'acbc(cde)efeg' ==> 'a#b#(cde)#f#g'
select regexp_replace(col,'(c+|e+)(?=[^\\)]*(\\(|$))','#')
from (select 'acbc(cde)efeg' col) t;
括号以内的字符(不包含括号)替换
'acbc(cde)efeg' ==> 'acbc(#d#)efeg'
select regexp_replace(col,'(c+|e+)(?=[^|\\(]*(\\)))','#')
from (select 'acbc(cde)efeg' col) t;
扩展:这里用到的正则
断言语法
断言语法 | 说明 |
(?=pattern) | 前向肯定断言,匹配pattern前面的位置 |
(?!pattern) | 前向否定断言,匹配后面不是pattern的位置 |
(?<=pattern) | 后向肯定断言,匹配pattern后面的位置 |
(?<!pattern) | 后向否定断言,匹配前面不是pattern的位置 |
元字符
元字符 | 说明 |
. | 匹配除换行符以外的任意字符 |
\b | 匹配单词的开始或结束 |
\d | 匹配数字 |
\s | 匹配任意的空白符 |
\w | 匹配字母或数字或下划线或汉字 |
^ | 匹配字符串的开始 |
$ | 匹配字符串的结束 |