正则表达式,其中第一个数字取决于第4和第5位数字

时间:2011-09-07 22:19:17

标签: regex

不确定如何使用正则表达式执行以下操作...
除了第4位和第5位为70-88或90-99之外,9位数字不能以900-999开头。

到目前为止,我有以下内容:

^9[0-9][0-9]

这只是检查前三位数,我不知道如何合并第二个条件。

2 个答案:

答案 0 :(得分:2)

这是正则表达式,它将找到所有以900开头的九位数字符合您的条件:

^9[0-9][0-9](7[0-9]|8[0-8]|9[0-9])[0-9]{4}

上述正则表达式的第二部分是OR条件(使用|符号),它匹配70-79,80-88和90-99模式。在http://regexpal.com/等在线测试仪上进行测试,看看它是如何工作的。如果要排除无效数字,则可能需要更改条件以查找无效数字(例如,以900开头,其中第四个数字为6或更小等)。

答案 1 :(得分:0)

这应符合您需要的数字:

^(?:9[0-9]{2}(?:[79][0-9]|8[0-8])[0-9]{4}|[0-8][0-9]{8})$

9[0-9]{2}(?:[79][0-9]|8[0-8])[0-9]{4}将匹配以9开头的数字,[0-8][0-9]{8}将匹配其余数字。 (不以900-999开头与9开头相同) 示例:http://rubular.com/r/6uVWC0cLgX

如果您的口味支持它,您可以使用lookahead

简化模式
^(?:9(?=..(?!89)[7-9])|[0-8])[0-9]{8}$

这里唯一的技巧就是第一个数字。它可以匹配9后跟2位数字和70到99之间的数字(但不是89),然后再输入8位数字。
示例:http://rubular.com/r/UVVkfJ3v3V