REGEXP_SUBSTR: 需要更精确的正则表达式代码

REGEXP_SUBSTR: Need more precise regex code

我正在尝试找到一种方法,让一个正则表达式代码只获取 .(点)之前的 5 位数字。 我已经尝试了很多东西,但似乎无法获得 99999...我想这样做而不 添加任何其他参数。

SELECT regexp_substr('ffffffff-5fd1-456b-8f4c-4a6ecc3b7cba::11899999.99', '[118]\d+') 
  FROM DUAL;

我目前得到 1189999,当我执行 '[118]\d{5}' 或 '[118]\d{5}+' 时已经得到 118999...

帮助...请...谢谢。

您可以捕获点前的 5 位数字:

regexp_substr('ffffffff-5fd1-456b-8f4c-4a6ecc3b7cba::11899999.99', '(\d{5})\.', 1, 1, NULL, 1)

参见Oracle demo

(\d{5})是一个捕获组,匹配5个连续的数字并将值存储在组1中,而\.只是匹配一个点(作为上下文)。 regexp_substr 函数的最后一个参数是捕获组的编号(这里,唯一一个是第一个)。