【问题标题】:Java regular expression for excluding certain numbers [duplicate]用于排除某些数字的Java正则表达式[重复]
【发布时间】:2017-05-26 09:31:43
【问题描述】:

我正在尝试执行以下操作,并尝试查找如何进行正确排除的示例,但我无法完全掌握它。

我应该排除数字 000、666 以及 900-999 之间的所有数字。

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

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

导致不必要的匹配:

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

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

这导致了一些匹配:

任何帮助将不胜感激!

【问题讨论】:

标签: java regex syntax


【解决方案1】:

匹配除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 以外的任何数字开头的数字1xx2xx7xx 等,如此处所示[1-578]这基本上意味着1-578
  • (?:0\d[1-9]|0[1-9]\d) 匹配所有以0 开头的数字,并确保数字不应该全部三个零
  • (?:6\d[0-57-9]|6[0-57-9]\d) 匹配所有以6 开头的数字,并确保该数字不应该全部三个六

测试:

快速测试以验证除000666900-999 之外是否所有匹配:Dotnet Fiddle

// Output for non-matching characters:
000, 666, 900, 901, 902, 903, 904, 905, 906, 907, 908, ... and so on

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-31
    • 1970-01-01
    • 2020-08-25
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多