Oracle - PCRE to Oracle REGEX



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

1331年@iwantthis@3ad44@2

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

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

由于Oracle DBMS不支持PCRE,我如何提取所需的子字符串?

将要在捕获组中匹配的表达式包裹起来,然后展开后看,然后使用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<此处小提琴>

在Oracle中,您可以使用

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

查看在线演示

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

参见REGEXP_SUBSTR参考页面。

最新更新