寻求精准REGEXP_SUBSTR正则表达式:提取小数点前5位数字
解决方法:提取小数点前最后5位数字
你要的结果99999可以通过调整正则表达式来实现,核心是精准定位到小数点前的最后5位数字,而不是从开头的118开始匹配。试试这个SQL语句:
SELECT regexp_substr('ffffffff-5fd1-456b-8f4c-4a6ecc3b7cba::11899999.99', '\d{5}(?=\.)') FROM DUAL;
为什么之前的正则不对?
你之前用的[118]\d+或[118]\d{5}存在逻辑错误:
[118]是字符类,它的作用是匹配单个字符:要么是1,要么是8,而不是匹配连续的118字符串。所以正则会从字符串里第一个1开始匹配,后面跟着任意数字,自然得不到你要的最后5位。
正确正则的含义
\d{5}(?=\.)的拆解:
\d{5}:匹配连续的5位数字(?=\.):这是正向零宽断言,用来确保这5位数字的后面紧跟着小数点(.),不会匹配其他位置的5位数字。
这样就能精准捕获到小数点前的最后5位数字99999,而且不需要添加额外的匹配参数,完全符合你的需求。
内容的提问来源于stack exchange,提问作者FoxArc
相关产品推荐
相关产品推荐

