正则表达式没有按预期工作

时间:2014-03-03 16:13:11

标签: regex

我需要以下正则表达式的帮助:

(0 ?)([1-8] ?){1}(\d ?){9}|(\d ?){10}
  • 正则表达式应匹配 10 11位
  • 第一位应为0
  • 第二位应仅包含 1 - 8位
  • 所有数字之间可以有空格,例如0 1 2 7 4 3 3 3 4 4 4
  • 数字可以没有空格,例如01274333444

我创建的正则表达式适用于除第三个条件之外的大多数情况,即第二个数字应仅包含1-8个数字。 非常感谢任何帮助

3 个答案:

答案 0 :(得分:2)

以下是您的正则表达式(0 ?)([1-8] ?){1}(\d ?){9}|(\d ?){10}目前正在做的事情:

Regular expression visualization

它也试图匹配11或12位而不是10或11位。

您需要做的是通过以下方式之一进行更改:

  • 在OR |周围添加一个组以限制其范围:(0 ?)([1-8] ?){1}(?:(\d ?){8}|(\d ?){9})

Regular expression visualization

  • 或者最好将其更改为8或9个字符的匹配:(0 ?)([1-8] ?){1}(\d ?){8,9}

Regular expression visualization

答案 1 :(得分:1)

您可以使用:

^0 ?[1-8] ?(?:[0-9] ?){8,9}$

我使用了锚点^$来确保没有前导或尾随数字。

答案 2 :(得分:0)

试试这个:

^(0\s?)([1-8]\s?)(\d\s?){8,9}$