正则表达式检查前3位连续数字

时间:2015-06-20 17:52:31

标签: regex regex-negation

想了解如何验证字符串,使前3个连续位数连续不能是8或9?例如:

88839182 (not valid) 
99923213 (not valid)
98188823 (valid) 
98939117 (valid)

尝试使用s.match("([98]){3}"),但它似乎不起作用,因为前3个字符也需要989。

4 个答案:

答案 0 :(得分:3)

您可以使用以下正则表达式来识别连续3个8或9:

"(?:([98])\1\1)"

Demo

为了匹配您想要的数字,您可以使用负向前看来匹配不在3连续9或8之前的数字:

^(?!(?:([98])\1\1)).*$

Demo

另外作为@ Luv2code的一个很好的建议你可以使用以下正则表达式强制你的正则表达式引擎匹配数字:

(?=^\d+$)(?!([98])\1\1)\d+

答案 1 :(得分:1)

\b(?!(?:888|999))\d+\b

你可以这样做。参见演示。

https://regex101.com/r/vH0iN5/3

答案 2 :(得分:0)

我假设您的问题陈述是正确的:您希望(a)找到数字字符串中的第一个三位数,以及(b)如果是888或999则拒绝该字符串。所以分两步执行:

  1. 查找并提取前三位数字。
  2. 如果匹配为888或999,则拒绝该字符串。
  3. 匹配三个连续数字的正则表达式只是$client = new GuzzleHttp\Client; try { $client->get('http://google.com/nosuchpage'); } catch (GuzzleHttp\Exception\ClientException $e) { $response = $e->getResponse(); $responseBodyAsString = $response->getBody()->getContents(); } 。其余的取决于您的编程语言(您没有指定);它几乎肯定是一种返回数字字符串中第一个匹配内容的方法。

答案 3 :(得分:0)

定义问题的另一种更简单的方法是“不以888或999开头”,

找到无效的数据:

s.match("^(999|888)")

查找有效数据;

!s.match("^(999|888)")