Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.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 9+;_Java_Regex_Java 9_Backtracking - Fatal编程技术网

Java 9+;

Java 9+;,java,regex,java-9,backtracking,Java,Regex,Java 9,Backtracking,有没有人有一个在Java11中工作的示例?大多数常见的例子(如“(a+a+)+b”)是。最好是没有反向引用,不知道在JDK 9+中是否可能 在我们的应用程序中,我们有一个逻辑来控制这种回溯,为了测试这种逻辑,我们使用了表达式“(x+x+)+y”。升级到JDK 11后,它不再导致需求行为。我正在运行java 14,回溯问题仍然存在。失败大约需要6秒钟 String regex = "(a+a+a+a+a+a+)+b"; String str = "aaaaaaaaaa

有没有人有一个在Java11中工作的示例?大多数常见的例子(如“(a+a+)+b”)是。最好是没有反向引用,不知道在JDK 9+中是否可能


在我们的应用程序中,我们有一个逻辑来控制这种回溯,为了测试这种逻辑,我们使用了表达式“(x+x+)+y”。升级到JDK 11后,它不再导致需求行为。

我正在运行java 14,回溯问题仍然存在。失败大约需要6秒钟

String regex = "(a+a+a+a+a+a+)+b";
String str = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac";
System.out.println(str.matches(regex));
这可以通过使用独立组
(?>X)
来防止。一旦组首次匹配,引擎将检查以下各项是否匹配
b
。如果没有,则无需重复,因为回溯不会改变结果。因此它会立即失败(即使对于更大的表达式和/或测试字符串也是如此)


我觉得你的问题需要更多的细节来解释你的问题。添加了更多的上下文和信息谢谢,延长了表达式和测试字符串都很有帮助。当然,六秒钟和Java 8的“几乎永远不会返回”之间有区别…
String regex1 = "(?>(a+a+a+a+a+a+)+)b";
System.out.println(str.matches(regex1));