Oracle - PCRE 到 Oracle REGEX

Oracle - PCRE to Oracle REGEX

我想在 '@' 第一次出现和第二次出现后提取所有内容:

1331@iwantthis@3ad44@2

在 PCRE 中,我会这样做(至少对于给定的示例):

(?<=\d{4}\@).\w+ 

Oracle DBMS 不支持 PCRE,如何提取想要的子串?

在 Oracle 中,您可以使用

SELECT REGEXP_SUBSTR('1331@iwantthis@3ad44@2', '[^@]+', 1, 2)

参见online demo

这将从第一个符号开始提取 second 出现(因为 occurrence 参数设置为 2)在 [^@]+ 模式的字符串中(因为 position 参数设置为 1),匹配 @ 字符以外的一个或多个字符作为尽可能多。

REGEXP_SUBSTR reference page 上查看更多详细信息。

将要匹配的表达式包装在捕获组中,然后展开后视,然后使用 REGEXP_SUBSTR 的第 6 个参数提取捕获组的值:

SELECT REGEXP_SUBSTR('1331@iwantthis@3ad44@2', '\d{4}\@(.\w+)', 1, 1, NULL, 1 )
FROM   DUAL;

输出:

| REGEXP_SUBSTR('1331@IWANTTHIS@3AD44@2','\D{4}\@(.\W+)',1,1,NULL,1) |
| :----------------------------------------------------------------- |
| iwantthis                                                          |

db<>fiddle here