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
我想在 '@' 第一次出现和第二次出现后提取所有内容:
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