Java正则表达式模式太长?

Java正则表达式模式太长?,java,regex,Java,Regex,我有一个比平常长一点的正则表达式。我试图在文本文档中捕获一些值 \\n*.*(k\\s=\\s\\d)(.|\\n)*?estimate\\s.*\\n*\\s*((\\d+|<)\\.\\d+)\\s*((\\d+|<)\\.\\d+)\\s*((\\d+|<)\\.\\d+)\\s*((\\d+|<)\\.\\d+)\\s*((\\d+|<)\\.\\d+)\\s*((\\d+|<)\\.\\d+)\\s+ 一旦我添加缺少的“e”,它就会停止工作 目前,

我有一个比平常长一点的正则表达式。我试图在文本文档中捕获一些值

\\n*.*(k\\s=\\s\\d)(.|\\n)*?estimate\\s.*\\n*\\s*((\\d+|<)\\.\\d+)\\s*((\\d+|<)\\.\\d+)\\s*((\\d+|<)\\.\\d+)\\s*((\\d+|<)\\.\\d+)\\s*((\\d+|<)\\.\\d+)\\s*((\\d+|<)\\.\\d+)\\s+
一旦我添加缺少的“e”,它就会停止工作

目前,我忽略了一些分组填写错误

出了什么问题?

(.|\\n)*?
使正则表达式引擎执行过多冗余回溯步骤。您需要用
(?s:.*?
)替换模式中的所有这些部分,这是一个与任何0+字符(包括换行符)匹配的修改器组。因为没有交替,所以这里没有多余的回溯


请注意,在JavaScript中(当您在regexr.com上测试仅支持JavaScript正则表达式风格的模式时),
(.|\n)*?
应替换为
[^]*?
[\s\s]*?
,因为它的正则表达式引擎根本不支持内联修饰符。

听起来很奇怪,你能发布一段复制它的Java代码吗?注意输入字符串。在你的例子中,我会先用一个正则表达式完全分解文本,然后用第二个或更多的正则表达式分析你感兴趣的值。在a$$永不使用
(.|\\n)*?
中,使用单个正则表达式做任何事情都是一件痛苦的事情。替换为
(?s:.*)
。在ReGeXR中,应该跨行匹配的<代码> * >代码>应被替换为<代码> [^ ] */COD>(因为该站点使用JS正则表达式)。请参阅下面的答案。
\\n*.*(k\\s=\\s\\d)(.|\\n)*?estimat