我有一组包含最少 1 个和最多 3 个值的字符串,格式如下:
123;456;789
123;123;456
123;123;123
123;456;456
123;456;123
我正在尝试编写一个正则表达式,以便我可以找到在同一个字符串上重复的值,所以如果你有123;456;789
它会返回null
但如果你有123;456;456
它会返回456
并123;456;123
返回123
我设法写了这个表达式:
(.*?);?([0-9]+);?(.*?)\2
它的工作原理是在null
没有重复值时返回,但它不完全返回我需要的值,例如:对于123;456;456
它返回的字符串和它返回123;456;456
的字符串123;123;123
123;123
我需要的是只返回([0-9]+)
表达式部分的值,从我读过的内容来看,这通常是使用非捕获组来完成的。但是要么我做错了,要么 Oracle SQL 不支持这一点,就好像我尝试使用?:
语法结果不是我期望的那样。
关于如何在 oracle sql 上进行此操作的任何建议?此表达式的目的是在查询中使用它。
SELECT REGEXP_SUBSTR(column, "expression") FROM DUAL;
编辑:
实际上根据https://docs.oracle.com/cd/B12037_01/appdev.101/b10795/adfns_re.htm
Oracle 数据库实现了符合 POSIX 扩展正则表达式 (ERE) 规范的正则表达式支持。
根据https://www.regular-expressions.info/refcapture.html
POSIX ERE 不支持非捕获组