在可选字符串之前匹配内容

时间:2019-05-08 21:47:36

标签: sql regex oracle regexp-substr

给出以下字符串,我想生成:A-2010

  • /Space/w_00123/A-2010/u_23
  • /Space/w_00123/A-2010(上方的/ u_23是可选的,因此在此处缺失)

所以我真正需要的是3到4之间的文本(如果存在,或者直到字符串末尾)。

我尝试过:

select
regexp_substr('/Space/w_00123/A-2010/u_23', '/Space/w_.+/(.*?)(?:/.+|$)', 1, 1, null, 1) r
from dual; -- this results in u_23 as opposed to A-2010

这里正确的匹配表达式是什么?

2 个答案:

答案 0 :(得分:2)

regexp_substr与第3个外观一起用作第4个参数可以满足您的需求

with t(str) as
(
 select '/Space/w_00123/A-2010/u_23' from dual union all
 select '/Space/w_00123/A-2010'      from dual
)
select regexp_substr(str,'([^/]+)',1,3) as "Result Strings"
  from t;

Result Strings
--------------
A-2010
A-2010

Demo

答案 1 :(得分:1)

使用否定的类尝试这样:

select
regexp_substr('/Space/w_00123/A-2010/u_23', '/Space/w_[^/]+/([^/]+)', 1, 1, null, 1) r
from dual

在线DB Fiddle

相关问题