我正在努力匹配3-4位数的10,最高为1390.低于100的数字从0开始.
示例匹配:
010 200 380 1280 1390
示例不匹配:
0200 285 231 1400
我目前最接近的模式是:([1-9]|0){1}[0-9]{1,2}0
但是它不匹配1130这样的数字.
我如何修改此模式以满足我的需求,或者我应该使用另一种模式?
正如评论中提到的其他人所说,正则表达式不是这项工作的最佳工具.也就是说,可能存在您没有其他选择的情况,所以让我们继续.
我们遇到了一个难题,所以我们会尝试将其分解成更容易的问题.我们可以按如下方式对可能的数字进行分区,这样各个正则表达式就变得非常明显了:
000-990
:那是^[0-9][0-9]0$
.
1000-1390
:那是^1[0-3][0-9]0$
.
现在我们需要做的就是将这两者结合起来.我们注意到它们都有一个共同的前缀^
和一个共同的后缀[0-9]0$
,所以我们可以将它简化为:
^([0-9]|1[0-3])[0-9]0$
事实上,你可能会让那些必须在几年内保持你的正则表达的穷人(可能是你)让生活更轻松,并保持简单的形式,添加一些评论(需要"忽略空白"选项) :
^( (?# 000, 010, ..., 990) [0-9][0-9]0 |(?# 1000, 1010, ..., 1390) 1[0-3][0-9]0 )$
这是假设也000
应该是有效的.如果不应该,你可以应用相同的技术并将你的数字分成010-090
,100-990
和1000-1390
.这样做是留给读者的练习.