我们拆开来看看:
(?<=\d) #当前位置前面必须是数字
(?<!\.\d*) #当前位置前面不能是小数点
(?=(\d{3})+(\.|$)) #当前位置是3个数字的循环,最后到小数点或结束
对照一串数字我们就不难发现,上面指定的当前位置,就是千分位所在位置,如:
345,678
12,345,678.12345
2,345,678
注:由于PHP不支持非定长逆序环视,因此,请使用Regexbuddy的 C# 语言进行测试。另外,Java可以使用\d{0,1000}来代替\d*进行测试
注:补充于2017-07-17
今天突然来了灵感,变相实现了非定长逆序环视,大家可以参考一下 :)
#支持10位小数
(?<!\.)(?<!\.\d)(?<!\.\d\d)(?<!\.\d\d\d)(?<!\.\d\d\d\d)(?<!\.\d\d\d\d\d)(?<!\.\d\d\d\d\d\d)(?<=\d)(?=(\d{3})+(\.|$))
在线工具演示地址:非定长逆序环视变相实现解决千分位加逗号正则问题
来自【混沌】的更简洁实现,原理是借助或分支优先消耗掉小数位,非小数位部分按前面的思路定位加入逗号
\d{3}\.\d*$|(?<!^)(?=(?:\d{3})+(?:\.|$))
在线工具演示地址:简洁实现千分位加逗号正则表达式
未经同意禁止转载!
转载请附带本文原文地址:正则表达式千分位加逗号实现,首发自 Zjmainstay学习笔记