Java 用于排除选项集的正则表达式
这是输入字符串253:13:2a 条件: 1第一部分是固定的。总是从253开始 第二部分也是本文的最后一部分 固定的总是2a 3中间的第一位数字可以有0-2。第二 数字位置可以有0-9。 我想排除中间可能的数字,比如00,12,19 e、 g 我正在使用下面的正则表达式,但它不能按预期工作Java 用于排除选项集的正则表达式,java,regex,Java,Regex,这是输入字符串253:13:2a 条件: 1第一部分是固定的。总是从253开始 第二部分也是本文的最后一部分 固定的总是2a 3中间的第一位数字可以有0-2。第二 数字位置可以有0-9。 我想排除中间可能的数字,比如00,12,19 e、 g 我正在使用下面的正则表达式,但它不能按预期工作 ^253:[[0-2][0-9]]&&[^[(00)(12)(19))]]:2a$ 这里有一个解决方案: ^253:(?!00)(?!12)(?!19)[0-2][0-9]:2a$ 这个函
^253:[[0-2][0-9]]&&[^[(00)(12)(19))]]:2a$
这里有一个解决方案:
^253:(?!00)(?!12)(?!19)[0-2][0-9]:2a$
这个函数使用一个负前瞻来排除包含00、12和19的输入
如果你真的不想看起来像个傻瓜,以下是方法:
^253:(0[1-9]|1[013-8]|2[0-9]):2a$
这个会稍微快一点,但我会选择一个模仿后面逻辑的最好的,这样更容易维护。使用负前瞻,在所有不想匹配的数字之间交替:
^253:(?!(00|12|19):)\d+:2a$
演示和分步说明:@timgeb:Updated。仅删除00、12和19。@Tushar:Language java请在询问regex时始终添加Language/tool标记,我是为您做的。经常需要根据口味定制正则表达式。@user3243499为什么突然想要一个没有lookaheads的正则表达式?我在某个地方读到过,lookahead可能很滑,而且它使用额外的参数memories@user3243499不,这个正则表达式不会滑。如果您担心这个小正则表达式的内存消耗,那么正则表达式就不是合适的工具。你是在为烤面包机或其他东西编写软件吗?正是最完美的。谢谢现在我明白了我犯的错误。在您的第一种方法中,代码演练如下:匹配253后:引擎将向前搜索两个位置,如果未找到00,则继续搜索下两个位置12,如果未找到所有三个数字,则仅匹配[0-2][0-9]。否则,只需从发现任何数字00、12或19的地方返回,不应继续匹配[0-2][0-9]?
^253:(?!(00|12|19):)\d+:2a$