我有类似 Order @ Confirm @@@@@ 2791 的字符串,我想在@@@@分隔符后获取2791。我尝试了以下方法,但未获得我期望返回的确切子字符串。
SELECT regexp_substr('Order @ Confirm @@@@2791','[^@@@@]+',1,2) regexp_substr
FROM dual;
我想从上述查询中返回2791。
答案 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;