我正在努力匹配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等数字。
我如何修改此模式以满足我的需要,还是应该使用另一种模式?
答案 0 :(得分:5)
正如评论中提到的其他人所说,正则表达式不是这项工作的最佳工具。也就是说,可能存在您没有其他选择的情况,所以让我们继续。
我们遇到了一个难题,所以我们会尝试将其拆分成更容易的问题。我们可以按如下方式对可能的数字进行分区,这样各个正则表达式就变得非常明显了:
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$
事实上,你可能会让那些在几年内(可能是你)保持你的正则表达的穷人的生活更轻松,并保持简单的形式,并添加一些评论(需要&#34 ;忽略空格"选项):
^( (?# 000, 010, ..., 990) [0-9][0-9]0
|(?# 1000, 1010, ..., 1390) 1[0-3][0-9]0
)$
这是假设000
也应该有效。如果不是,您可以应用相同的技术并将您的数字划分为010-090
,100-990
和1000-1390
。这样做是留给读者的练习。
答案 1 :(得分:0)
如果你需要匹配不包括 000 的值,这里是正则表达式:
^(0[1-9]|[1-9][0-9])0$