假如我的SQL如下select REGEXP_SUBSTR('<p><img height="284" alt="" width="450" src="/userfiles/image/img.jpg" />请填写内容<img height="284" alt="" width="450" src="/userfiles/image/img2.JPG" /></p>', '/USERFILES.*\.JPG',1,1,'i') sd from dual
得出的结果是
/userfiles/image/img.jpg" />请填写内容<img height="284" alt="" width="450" src="/userfiles/image/img2.JPG但我只想要第一个JPG的路径,即:/userfiles/image/img.jpg,
不知道我的表达式要怎么改,
REGEXP_SUBSTR函数的第四个参数我一直搞不清楚什么意思,
还有就是怎么来解决通常正则表达式的贪婪原则。

解决方案 »

  1.   


    select regexp_substr('<p>
    <img height="284" alt="" width="450" src="/userfiles/image/img.jpg" />
    请填写内容
    <img height="284" alt="" width="450" src="/userfiles/image/img2.JPG" />
    </p>',
    '/userfiles[^"<>]+\.jpg',1,1,'i') from dual;
      

  2.   

    --第四个参数是出现次数(也就是指替换第几次出现的),如:SQL> select regexp_substr('aa1ccddaa3cc','aa[[:digit:]]cc',1,1,'i') str from dual;
     
    STR
    -----
    aa1cc
     
    SQL> select regexp_substr('aa1ccddaa3cc','aa[[:digit:]]cc',1,2,'i') str from dual;
     
    STR
    -----
    aa3cc
     
    SQL> 
      

  3.   

    修改了一下楼主的SQLSQL> select REGEXP_SUBSTR('<p><img height="284" alt="" width="450" src="/userfiles/image/img.jpg" />请填写内容<img height="284" alt="" width="450" src="/userfiles/image/img2.JPG" /></p>',
      2                       '/USERFILES.*?'||'\.JPG',
      3                       1,
      4                       1,
      5                       'i') sd
      6    from dual
      7  ;
     
    SD
    ------------------------
    /userfiles/image/img.jpg