求匹配001-150范围的正则表达式,现有尝试方案存在问题
正则表达式匹配001-150的正确方案
我来帮你搞定这个正则问题!先直接给你能精准匹配001到150的表达式:
^(00[1-9]|0[1-9]\d|1[0-4]\d|150)$
先说说你之前方案的问题:
- Case1的问题:你写的
1[0-5][0-9]这部分,第二个字符是0-5,第三个是0-9,这就会把151到159也包含进来,这就是为什么你的范围到了159,超出了预期的150上限。 - Case2的问题:
1[0-50][0]是错误的写法,字符组[0-50]并不表示0-50,而是表示单个字符是0-5或者0(相当于0-5),再加上第三个字符必须是0,所以只能匹配100、110…150这类末尾为0的数,漏掉了大量中间值。
拆解正确的正则逻辑:
我们把范围拆成几个不重叠的区间来覆盖:
00[1-9]:匹配001到009,确保是三位数,前两位为0,最后一位从1开始(排除000)0[1-9]\d:匹配010到099,第一位是0,第二位从1到9(避免和上面的00x重复),第三位可以是0-9,覆盖所有两位数前面补0的情况1[0-4]\d:匹配100到149,第一位是1,第二位从0到4,第三位0-9,这样就覆盖了100到149的所有三位数150:单独匹配150这个边界值,因为它是范围的上限,不能包含151及以上的数,所以单独列出来最稳妥
这样组合起来,就能精准命中001到150之间的所有三位数,不会多也不会少。
内容的提问来源于stack exchange,提问作者Arnab Shaw
相关产品推荐
相关产品推荐

