【发布时间】:2021-03-09 15:07:08
【问题描述】:
我想在'@'第一次出现和第二次出现之后提取所有内容:
1331@iwantthis@3ad44@2
在 PCRE 中,我会这样做(至少对于给定的示例):
(?<=\d{4}\@).\w+
由于 Oracle DBMS 不支持 PCRE,如何提取所需的子字符串?
【问题讨论】:
我想在'@'第一次出现和第二次出现之后提取所有内容:
1331@iwantthis@3ad44@2
在 PCRE 中,我会这样做(至少对于给定的示例):
(?<=\d{4}\@).\w+
由于 Oracle DBMS 不支持 PCRE,如何提取所需的子字符串?
【问题讨论】:
在 Oracle 中,您可以使用
SELECT REGEXP_SUBSTR('1331@iwantthis@3ad44@2', '[^@]+', 1, 2)
请参阅online demo。
这将从字符串中的第一个符号(作为 位置 参数设置为[^@]+ 模式的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) | | :------------------------------------------------- ---------------- | |我想要这个 |
db小提琴here
【讨论】: