用于排除某些数字的Java正则表达式

时间:2017-05-26 09:31:43

标签: java regex syntax

我正在尝试执行以下操作,并尝试找到如何进行适当排除的示例,但我无法完全了解它。

question

我应该排除数字000,666和900-999之间的所有数字。

这是我对这个问题的尝试,但它并没有包括排除:

String p = "(^[0-9]{3})-([0-9]{2})-([0-9]{4}$)";

导致不必要的匹配: wrong answer

这是我尝试排除的尝试,但我不确定如何:

String p = "(^[^666000]{3})-([0-9]{2})-([0-9]{4}$)";

导致了一些比赛:

enter image description here

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

除了000666900-999之外的其他任何内容:

[1-578]\d\d|(?:0\d[1-9]|0[1-9]\d)|(?:6\d[0-57-9]|6[0-57-9]\d)

Regex101 Demo

如何运作

  • [1-578]\d\d第一个替代匹配069 之外的所有数字开头的所有数字,即1xx,{{ 1}},2xx等,如此处所示7xx,基本上代表[1-578]1-57
  • 8匹配(?:0\d[1-9]|0[1-9]\d) 开头的所有数字,并确保数字不应所有三个零
  • 0匹配(?:6\d[0-57-9]|6[0-57-9]\d) 开头的所有数字,并确保数字不应该所有三个六

<强>测试

快速测试以验证除6000666之外的所有内容是否匹配:Dotnet Fiddle

900-999