在oracle中匹配后提取子字符串

时间:2018-08-29 18:22:10

标签: oracle

我有类似 Order @ Confirm @@@@@ 2791 的字符串,我想在@@@@分隔符后获取2791。我尝试了以下方法,但未获得我期望返回的确切子字符串。

SELECT regexp_substr('Order @ Confirm @@@@2791','[^@@@@]+',1,2) regexp_substr
FROM dual;

我想从上述查询中返回2791。

2 个答案:

答案 0 :(得分:3)

SELECT regexp_substr('Order @ Confirm @@@@2791','@@@@(.*)$',1,1, null, 1) regexp_substr
FROM dual;

如果要将匹配限制为数字:

SELECT regexp_substr('Order @ Confirm @@@@2791','@@@@(\d+)$',1,1, null, 1) regexp_substr
FROM dual;

regexp_replace也可以工作:

SELECT regexp_replace('Order @ Confirm @@@@2791','.*?@@@@(\d+)$', '\1') regexp_replace
FROM dual;

请注意,如果未找到匹配项,则使用regexp_substr();如果未找到匹配项,则使用regexp_replace();如果未找到匹配项,则返回原始字符串。

答案 1 :(得分:2)

您不需要正则表达式。

SELECT substr('Order @ Confirm @@@@2791', 
              instr('Order @ Confirm @@@@2791', '@@@@') + 4) as your_substr
FROM dual;