SQL> Select REGEXP_REPLACE('aabbcc','(.*)', '\1,') FROM dual;
 
REGEXP_REPLACE('AABBCC','(.*)'
------------------------------
aabbcc,,
 
为何会有两个逗号?求详细解答。

解决方案 »

  1.   

    SQL> --*表示匹配0个或者多个字符,最后空字符''也被匹配了一次
    SQL> --使用+就只有只匹配了一次
    SQL> Select REGEXP_REPLACE('aabbcc','(.+)', '\1,') FROM dual;
     
    REGEXP_REPLACE('AABBCC','(.+)'
    ------------------------------
    aabbcc,
     
    SQL> 
      

  2.   


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

  3.   

    也许将问题描述复杂化反倒更容易找出答案
    REGEXP_REPLACE('aabbcc','(.*)', '\1,\1;\1&')
    REGEXP_REPLACE('aabbcc','(b*)', '\1,')
    REGEXP_REPLACE('aabbcc','(b*)', '\1,\1;\1&')
    参照上面几例的运行结果,我估计与空串的匹配有关!
    (.*)这个正则表达式匹配了若干次空串,所以就替换了多次!