正则表达式排除选项集

时间:2016-01-09 15:39:35

标签: java regex

这是输入字符串253:13:2a

条件:

  • 1)第一部分是固定的。始终以253
  • 开头
  • 2)最后一部分也是 固定。总是2a
  • 3)中间的第一位数可以是0-2。第二 数字位置可以有0-9。

我想排除中间可能的数字,如00,12,19。

e.g。

253:13:2a // is correct
but 253:00:2a // not correct
253:19:2a // not correct

我正在使用以下正则表达式,但它无法正常工作。

^253:[[0-2][0-9]]&&[^[(00)(12)(19))]]:2a$

2 个答案:

答案 0 :(得分:3)

这是一个解决方案:

^253:(?!00)(?!12)(?!19)[0-2][0-9]:2a$

这个使用负前瞻来排除包含“00”,“12”和“19”的输入。

如果真的希望在没有前瞻的情况下做到这一点,请按以下方式进行:

^253:(0[1-9]|1[013-8]|2[0-9]):2a$

这个会非常快,但我会选择最能模仿背后逻辑的那个,这样就更容易维护。

答案 1 :(得分:1)

使用否定前瞻,并在您不想匹配的所有数字之间切换:

^253:(?!(00|12|19):)\d+:2a$

演示和分步说明:https://regex101.com/r/nQ3uX2/3