Java 9+;
有没有人有一个在Java11中工作的示例?大多数常见的例子(如“(a+a+)+b”)是。最好是没有反向引用,不知道在JDK 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
在我们的应用程序中,我们有一个逻辑来控制这种回溯,为了测试这种逻辑,我们使用了表达式“(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));