匹配3-4位数的10的倍数

时间:2017-01-09 14:47:05

标签: regex

我正在努力匹配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等数字。

我如何修改此模式以满足我的需要,还是应该使用另一种模式?

2 个答案:

答案 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-090100-9901000-1390。这样做是留给读者的练习。

答案 1 :(得分:0)

如果你需要匹配不包括 000 的值,这里是正则表达式:

  • 010-990:那是 ^(0[1-9]|[1-9][0-9])0$