gpt4 book ai didi

java - 当我在 groovy 中使用正则表达式替换时,如何解决 java.lang.StackOverflowError 问题?

转载 作者:行者123 更新时间:2023-11-30 02:16:07 25 4
gpt4 key购买 nike

我尝试在大文件中使用此命令,但出现此错误:java.lang.StackOverflowError

这是我的代码

stringx.replaceAll(/(\n.*?;(.*?);.*?;.*?;.*?;.+)(\n.*?;\2;.+)+/, '\ntitle\n$1\n$2\n')

最佳答案

这看起来像 catastrophic backtracking 的另一个案例当每个 .*?; 尝试匹配一小部分文本时,直到 some ;。但由于 . 也可以匹配 ; 当整个正则表达式的匹配将失败时,正则表达式引擎将需要回溯并尝试寻找不同的方式来匹配 .*? 子表达式。因此,它将尝试“延长”其中一些和/或限制其他以使匹配成为可能。拉伸(stretch)将允许在匹配中包含 ; ,并且由于这里有很多的可能性来检查(并且事实上正则表达式引擎正在使用一些递归)你最终会与StackOverflowError

为了防止 .*?; 匹配 ; 之后的更远文本,我们可以将其限制为仅匹配非分号字符,直到其后的第一个分号为止。因此,我们可以将每个 .*?; 替换为 [^;\r\n]*; (我们也可以通过这种方式摆脱不情愿的量词)。

关于java - 当我在 groovy 中使用正则表达式替换时,如何解决 java.lang.StackOverflowError 问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48362376/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com