给出以下字符串,我想生成: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
这里正确的匹配表达式是什么?
答案 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
答案 1 :(得分:1)
使用否定的类尝试这样:
select
regexp_substr('/Space/w_00123/A-2010/u_23', '/Space/w_[^/]+/([^/]+)', 1, 1, null, 1) r
from dual