Java模式匹配需要太多时间来验证

时间:2016-08-12 11:33:39

标签: java regex performance

我有一个正则表达式([A-Za-z0-9 ]*){1,60}

我与值4503212220033000600034SS SS SS,ndklfjsldfld ...

匹配

在20秒(大约)之后,由于我在我的值中使用了,逗号,它返回false。

为什么需要太多时间来验证?

2 个答案:

答案 0 :(得分:2)

由于catastrophical backtracking,您的模式需要花费太多时间。转到regex101.com regex调试器页面,查看幕后发生的情况。

现在,您的模式匹配无限数量的字母数字符号和空格1到60次,如果需要验证,这是不合逻辑的。

如果您需要匹配1到60个字母数字字符或空格的字符串,请使用

s.matches("[A-Za-z0-9 ]{1,60}")

答案 1 :(得分:1)

有时正则表达式是个好主意。

但在你的情况下,你似乎对第一个空间前后的东西感兴趣。

那么,为什么需要一个正则表达式,如果你可以调用indexOf('');找到字符串中用于分隔字符串重要部分的位置?

我并不是说使用正则表达式是错误的(并且可能在修复“回溯”问题之后它就是你需要的);但是:太多人正在使用正则表达式仅仅因为存在...