Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用于排除选项集的正则表达式_Java_Regex - Fatal编程技术网

Java 用于排除选项集的正则表达式

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: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$
这个函数使用一个负前瞻来排除包含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$