oracle中的正则表达式的奇怪问题regexp_replace

renfengjun
博客专家认证
2011-06-08 02:37:33

SQL> Select REGEXP_REPLACE('aabbcc','(.*)', '\1,') FROM dual;

REGEXP_REPLACE('AABBCC','(.*)'
------------------------------
aabbcc,,



为何会有两个逗号?求详细解答。
...全文
176 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
uwinb 2011-06-08
  • 打赏
  • 举报
回复
也许将问题描述复杂化反倒更容易找出答案
REGEXP_REPLACE('aabbcc','(.*)', '\1,\1;\1&')
REGEXP_REPLACE('aabbcc','(b*)', '\1,')
REGEXP_REPLACE('aabbcc','(b*)', '\1,\1;\1&')
参照上面几例的运行结果,我估计与空串的匹配有关!
(.*)这个正则表达式匹配了若干次空串,所以就替换了多次!
304的的哥 2011-06-08
  • 打赏
  • 举报
回复

--莫非楼主是想要这个效果
SQL> select regexp_replace('aabbcc','(.)','\1,') reg from dual;

REG
------------
a,a,b,b,c,c,
tangren 2011-06-08
  • 打赏
  • 举报
回复
SQL> --*表示匹配0个或者多个字符,最后空字符''也被匹配了一次
SQL> --使用+就只有只匹配了一次
SQL> Select REGEXP_REPLACE('aabbcc','(.+)', '\1,') FROM dual;

REGEXP_REPLACE('AABBCC','(.+)'
------------------------------
aabbcc,

SQL>

17,082

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧