如何在REGEXP_REPLACE模式中添加方括号并保留[XXX]格式?
解决REGEXP_REPLACE中添加方括号的问题
针对你要把__XXXX__格式替换为[XXXX]的需求,直接在替换字符串里使用方括号即可,无需额外转义。以下是不同环境下的具体实现:
常见SQL数据库示例
MySQL / PostgreSQL
SELECT REGEXP_REPLACE('MSD_40001_ME_SPE__XXXX__Technical__Specification_REV9_(2021_05_27)_xls', '__([^_]+)__', '[$1]');
Oracle
SELECT REGEXP_REPLACE('MSD_40001_ME_SPE__XXXX__Technical__Specification_REV9_(2021_05_27)_xls', '__([^_]+)__', '[$1]') FROM DUAL;
关键说明
- 模式
__([^_]+)__:匹配两个下划线包裹的内容,([^_]+)捕获中间的非下划线字符(如果你的XXXX包含下划线,可改用(.+?)做非贪婪匹配)。 - 替换字符串
[$1]:直接用方括号包裹捕获到的分组内容,这里方括号是普通字符,不需要加转义符\——你之前转义无效就是因为多此一举了。
额外情况:如果需要在正则模式里匹配方括号
要是后续需要在正则的字符集(方括号内)里匹配方括号本身,不同引擎的写法略有区别:
- 多数引擎支持直接写
[\[\]]来匹配左/右方括号; - MySQL里也可以用
[[]匹配左方括号,[]]匹配右方括号。
内容的提问来源于stack exchange,提问作者guray
相关产品推荐
相关产品推荐

