2011-03-10 57 views

回答

4

虽然你能做到这一点在理论上,正则表达式会非常复杂以至于无法维护。

2

它可以完成,但结果将是丑陋的。 真的需要使用正则表达式吗?

因此,无论如何:正如您正确观察,最初的622很简单。现在,如果...

  1. ...它从1开始,接着是26到99之间;或
  2. ...它以2..8范围内的某些值开始;或
  3. ...它以9开头,然后是0..25范围内的内容。

而一些是26和99之间,如果...

  1. 它始于2,其次是6和9之间的东西;或
  2. 它开始于范围2..9中的某些东西。

和范围0..25一样。

我会让你把这些东西放在一起,因为如果你打算在自己身上施加这样的事情(或者谁将会维护代码),你应该为自己找出它是多么的痛苦。请再考虑一下:你真的需要用RE而不是其他方式吗?

5

假设一个包含范围:

^622(12[6-9]|1[3-9][0-9]|[2-8][0-9][0-9]|9[01][0-9]|92[0-5])$ 

不过的RE是不是真的意味着数字任务,所以我劝你找到不同的解决方案。

+0

+1既解决又说“不这样做!” – 2011-03-10 11:08:43

+1

我想我只是证明了我自己的观点:第一次尝试时出现了一个错误。 – 2011-03-10 11:12:35

+1

你没有考虑过'6222 **' – codaddict 2011-03-10 11:39:08

2

虽然这可能是可能的,但正则表达式并不是真正的正确工具。最好是将字符串转换为数字,并使用正在使用的语言的正常数字比较。

3
^622(?:12[6-9]|1[3-9][0-9]|[2-8][0-9][0-9]|9[01][0-9]|92[0-5])$ 

说明:

前缀622是常见的。删除它,我们需要一个正则表达式匹配126 - 925

范围126-925可以拆分为:

RANGE  REGEX 
----------------------------------------- 
126 - 129  12[6-9] 
130 - 199  1[3-9][0-9] 
200 - 899  [2-8][0-9][0-9] 
900 - 919  9[0-1][0-9] 
920 - 925  92[0-5] 

显然,这是没有办法的办法去了解这项工作。一个简单的比较操作员将完成这项工作。