如何在正则表达式

时间:2015-08-26 03:23:29

标签: sql regex oracle

我想在使用Oracle的字符串中找不到分隔符**后返回NULL值。我有字符串

 first path**second path

我想在分隔符**之后剪切字符串并使用此正则表达式

 REGEXP_SUBSTR(str , '[^**]*$')

结果是正确的。它返回second path。但我需要的是当字符串没有分隔符**(例如firstpathsecondpath)并且需要返回NULL时。我该怎么改变我的正则表达式?目前,当没有分隔符**时,正则表达式返回整个字符串。

2 个答案:

答案 0 :(得分:4)

如果在源字符串中找不到两个星号后跟一些文本,则此查询将返回NULL:

WITH t AS (SELECT 'first path**second path' text FROM DUAL
           UNION
           SELECT 'third pathfourth path' text FROM DUAL)
SELECT SUBSTR(REGEXP_SUBSTR(t.text,'(\*{2})(.+)'),3)
FROM t

答案 1 :(得分:1)

当没有匹配时,您将获得原始字符串。使用选择案例,测试双重图示。找到后,返回第二部分,否则返回NULL:

SQL> with tbl(rownbr, str) as (
     select 1, 'first path**second path' from dual
     union
     select 2, 'third pathfourth path' from dual
   )
   select rownbr, str, case REGEXP_INSTR(str , '\*\*')
     when 0 then
       NULL
     else
       REGEXP_SUBSTR(str , '[^**]*$')
      end data
   from tbl;

    ROWNBR STR                     DATA
---------- ----------------------- -----------------------
         1 first path**second path second path
         2 third pathfourth path

SQL>