我在我的一个旧Java系统中使用了下面显示的正则表达式,最近导致了回溯问题.回溯线程经常导致机器的CPU达到上限,并且在重新启动应用程序之前它不会返回.
任何人都可以建议一种更好的方法来重写这种模式或一种可以帮助我这样做的工具吗?
图案:
^\[(([\p{N}]*\]\,\[[\p{N}]*)*|[\p{N}]*)\]$
Run Code Online (Sandbox Code Playgroud)
工作价值:
[1234567],[89023432],[124534543],[4564362],[1234543],[12234567],[124567],[1234567],[1234567]
Run Code Online (Sandbox Code Playgroud)
灾难性的回溯值 - 如果值中有任何错误(最后添加额外的括号):
[1234567],[89023432],[124534543],[4564362],[1234543],[12234567],[124567],[1234567],[1234567]]
Run Code Online (Sandbox Code Playgroud) 如果给定正则表达式有效,我想检查Adobe AIR.我正在寻找像这里类似的somtehing: 如何检查给定的Regex是否有效?
我不想比较正则表达式和文本值 - 我想检查这个正则表达式是否有效.如果有人输入无效的正则表达式 - 例如:"x {5,-3}"或"(((^^ $$$)//)"或类似的东西,我只需要告诉他这个正则表达式不是有效 - 它不正确的正则表达式.
在Java中,它可以通过以下方式完成:[code]
try {
Pattern.compile(userInputPattern);
} catch (PatternSyntaxException exception) {
System.err.println(exception.getDescription());
System.exit(1);
}
Run Code Online (Sandbox Code Playgroud)
[/码]