关于正则表达式
「 使用正则式识别1-65555之间的数 」
2013-05-29
起因
正则表达式初次被我重视归咎于百合仙子,当时以为‘他’是美女,当然美女在群里出的题目都大家都相当重视去解决,估计当时有很多兄弟被他忽悠过。不过到现在来看,这种忽悠是值得的,终归最后是拓宽了知识面,同时认识了一群志趣相投的业内人士。
只所以今天重拾正则这个话题,原因是昨天有同事提到一次面试题,遇到此题。
题目
原文:如何匹配一个数字,范围在(1-65555)不可以使用分组|
。
分析
匹配数字,正则对应的元字符是\d
,单词的开始结束\b
,这样就有了雏形
`\b\d\d\d\d\d\b`
但是此时是配置5位任意数,对于1、2、3、4位数就无法匹配,解决的方法是加入限定符重复零次或一次?
,即
`\b\d?\d?\d?\d?\d?\b`
这样就可以匹配0-99999的数,要进一步对该值进行限制,就需要加入零宽度断言(?<!exp)
最后的结果就是
`\b[1-6]?\d?(?<!6[6-9])\d?(?<!65[6-9])\d?(?<!655[6-9])\d?(?<!6555[6-9])\b`
结果
`\b[1-6]?\d?(?<!6[^1-5])\d?(?<!65[6-9])\d?(?<!655[6-9])\d?(?<!6555[6-9])\b`
这个结果还不是很完美,它包含了0开头的数字, 先做记录,以后再做完整。