如何解决ORACLE REGEXP 限制?
我正在测试适用于 Python 的 oracle REGEXP_SUBSTR
函数和正则表达式,或者诸如 https://regex101.com/ 之类的 Web 测试工具不适用于 Oracle。
示例:
((?:NF\s{0,1}EN){0,1}[\s]{0,1}ISO[\s]{0,1}[\d]{3,6}(?:[\:]{0,1}\d{1,4}){0,1}[\-]{0,1}\d{0,1})
字符串:VAS H M1582/950-80 ABCDFEF - ISO4014
匹配: ISO4014
,但 oracle regexp_like
不匹配:
不匹配:
SELECT REGEXP_SUBSTR (
'VAS H M1582/950-80 ABCDFEF - ISO4014','((?:NF\s{0,1})')
FROM DUAL;
有什么想法吗?
解决方法
你可以使用
(NF\s?EN)?\s?ISO\s?\d{3,6}(:?\d{1,4})?-?\d?
注意:
- Oracle regex 不“喜欢”
[\s]
,即括号内的速记字符类,您不应该那样使用它们 -
{0,1}
等于?
(出现一次或零次) -
(?:...)
不支持非捕获组,您应该将它们替换为捕获组。 (请注意,(:?
不是非捕获组,它只是模式中第二个捕获组开头的可选冒号)。
您可以将我的 XT_REGEXP 用于 PCRE 兼容的正则表达式:https://github.com/xtender/XT_REGEXP
select *
from
table(xt_regexp.get_matches(
'VAS H M1582/950-80 ABCDFEF - ISO4014','((?:NF\s{0,1}EN){0,1}[\s]{0,1}ISO[\s]{0,1}[\d]{3,6}(?:[\:]{0,1}\d{1,4}){0,1}[\-]{0,1}\d{0,1})'
));
结果:
COLUMN_VALUE
------------------------------
ISO4014
1 row selected.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。