java正则表达式匹配Stuck my JVM
我在JBehave库上遇到了一些问题,他们归结为正则表达式在我的JRE上用CPU工作
表达式是(.*?)?(\{((.*?)(\|)?)*?\})(.*)
,我将它与create entity of type $entityType {set properties $propertyNames to values $propertyValues
匹配——请注意未闭合的花括号
有没有办法优化上述表达式或优雅地解决它
你可以在下面搜索框中键入要查询的问题!
我在JBehave库上遇到了一些问题,他们归结为正则表达式在我的JRE上用CPU工作
表达式是(.*?)?(\{((.*?)(\|)?)*?\})(.*)
,我将它与create entity of type $entityType {set properties $propertyNames to values $propertyValues
匹配——请注意未闭合的花括号
有没有办法优化上述表达式或优雅地解决它
# 1 楼答案
这并不是因为它循环,而是它远没有快速失败。原因在于这一部分:
第一个
*?
和第二个应该匹配什么?如果出现故障,正则表达式引擎必须回溯以尝试所有组合。(不是DFA引擎,而是Java正则表达式引擎NFA)现在,你需要告诉这个正则表达式应该匹配什么,这样才能写出一个健全的正则表达式
顺便说一句,这就是为什么懒惰的量词很糟糕