@PheonixHkbxoic
2017-11-04T22:56:16.000000Z
字数 874
阅读 974
RegExp
(?=(?=(?:\d?(?:9(?=\d8)|8(?=\d7)|7(?=\d6)|6(?=\d5)|5(?=\d4)|4(?=\d3)|3(?=\d2)|2(?=\d1))\d){3}\d?)|(?=(?:\d?(?:1(?=\d2)|2(?=\d3)|3(?=\d4)|4(?=\d5)|5(?=\d6)|6(?=\d7)|7(?=\d8)|8(?=\d9))\d){3}\d?))(?=(?:(?<a>\d)(?<b>\d)(?=(?:\k<a>\d){3}|(?:\d\k<b>){3})))\d{8}
地址:http://regex.zjmainstay.cn/r/eBJvG3/1
I. 匹配4个隔位相同数字
(?=(?:(?<a>\d)(?<b>\d)(?=(?:\k<a>\d){3}|(?:\d\k<b>){3})))
如:12131415中的1,利用反向引用来实现 4个数字,并隔位。
II. 巧妙的匹配连续数字
(?=(?=(?:\d?(?:9(?=\d8)|8(?=\d7)|7(?=\d6)|6(?=\d5)|5(?=\d4)|4(?=\d3)|3(?=\d2)|2(?=\d1))\d){3}\d?)|(?=(?:\d?(?:1(?=\d2)|2(?=\d3)|3(?=\d4)|4(?=\d5)|5(?=\d6)|6(?=\d7)|7(?=\d8)|8(?=\d9))\d){3}\d?))
匹配连续数字 有两个规则: 这个是重点中的重点
规则2:匹配连续数字的同时,利用环视对其后两位进行检查,这个不太好表达
简单而直观的规则呈现就像
11213141
112,213,314这个3个数字为一组,每组有两个连续数字,共3组
巧妙点在于 占位匹配为2位,过滤匹配为3位
至于前边和后边的\d?
因为连续的数字 可能 是从第1位或第2位开始的