java - 为什么正则表达式得到 stackOverFlow

标签 java regex scala

当我尝试使用 scala lib(使用 re2)匹配上述正则表达式时,代码进入以下路径并超时 1 分钟:

正则表达式:

(([a-z0-9!#$%&'*+?^_`{|}~-]+(?:.[a-z0-9!#$%&'*+=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])))

堆栈跟踪:

at java.util.regex.Pattern$CharProperty.match(Pattern.java:3693)
at java.util.regex.Pattern$Curly.match(Pattern.java:4125)
at java.util.regex.Pattern$CharProperty.match(Pattern.java:3694)
at java.util.regex.Pattern$GroupHead.match(Pattern.java:4556)
at java.util.regex.Pattern$Loop.match(Pattern.java:4683)
at java.util.regex.Pattern$GroupTail.match(Pattern.java:4615)
at java.util.regex.Pattern$Curly.match0(Pattern.java:4170)
at java.util.regex.Pattern$Curly.match(Pattern.java:4132)
at java.util.regex.Pattern$CharProperty.match(Pattern.java:3694)

我不确定它是否无限循环,因为它可能会在长时间持续后工作。 我需要帮助理解这个表达式中到底是什么导致了这种情况的发生以及如何改进这个表达式。

最佳答案

您的正则表达式具有嵌套量词(例如 (a+)*)。这个works well with re2但是not with most other regular expression engines .

关于java - 为什么正则表达式得到 stackOverFlow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40027740/

相关文章:

Java 平均值,跳跃

javascript - 向正则表达式添加特殊字符?

java - 将 Java 字符串拆分为具有特殊字符和复杂情况的空格

JavaScript 正则表达式 : remember a match without getting `undefined` results

scala - 代码格式:如何将多行代码与特殊字符对齐?

java - 在 kotlin 中将 String 转换为 JsonObject 返回 null

java - android 获取图片按时间排序

scala - scala Predef 对象中无法识别的代码

scala - 如何原生地从Scala的HDFS中读取文本文件(不使用Spark)?

java - 将泛型类型参数标记为 Java 8 中的功能接口(interface)