括号以外的字符(不包含括号)替换
'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 | 匹配字母或数字或下划线或汉字 |
| ^ | 匹配字符串的开始 |
| $ | 匹配字符串的结束 |
本文探讨了如何使用正则表达式进行字符串替换,包括替换括号外的字符和括号内的字符。通过实例展示了正向肯定断言和否定断言的使用,例如`(c+|e+)(?=[^)]*((|$))`用于替换括号外的字符,`(c+|e+)(?=[^|(]*()))`用于替换括号内的字符。这些技巧对于处理复杂的字符串操作非常有用。
7万+

被折叠的 条评论
为什么被折叠?



