我想在使用Oracle的字符串中找不到分隔符**
后返回NULL值。我有字符串
first path**second path
我想在分隔符**
之后剪切字符串并使用此正则表达式
REGEXP_SUBSTR(str , '[^**]*$')
结果是正确的。它返回second path
。但我需要的是当字符串没有分隔符**
(例如firstpathsecondpath)并且需要返回NULL
时。我该怎么改变我的正则表达式?目前,当没有分隔符**
时,正则表达式返回整个字符串。
答案 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>