REGEXP_SUBSTR('34,56,-23','[^,]*',1,2,'i')
应该和
REGEXP_SUBSTR(',56,-23','[^,]*',1,1,'i')
的效果是一样的
同样
REGEXP_SUBSTR('34,56,-23','[^,]+',1,2,'i')
应该和
REGEXP_SUBSTR(',56,-23','[^,]+',1,1,'i')
的效果是一样的

解决方案 »

  1.   

    我认为select  REGEXP_SUBSTR('34,56,-23','[^,]*',1,2,'i') AS STR FROM DUAL 得到的结果应该是56,但实际结果为空。请解释下为何?
      

  2.   

    REGEXP_SUBSTR('34,56,-23','[^,]*',1,2,'i') 
    执行顺序
    1、找到第一个满足表达式的字符串为34
    2、把第一个字符串从原始字符串中去除,即‘,56,-23’
    3、从字符串‘,56,-23’ 找到的下一个满足'[^,]*'的字符串为空,返回结果
      

  3.   

    56不就满足'[^,]*‘么。
    '*' 匹配前面的子表达式零次或多次,0次的情况下,‘,’也会占一个位置,但是返回的值是null。
    也就是说当你用'*'的时候,‘,’也会占一个位置。
    而(+)则只将其剔除掉了