我想提取'@'第一次和第二次出现之后的所有内容:
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
参考页面。