微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ORACLE REGEXP 限制?

如何解决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?

its demo at regex101.com

注意:

  • 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?