gpt4 book ai didi

使用 RegEx 解析大字符串时出现 java.lang.StackOverflowError

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:23:57 25 4
gpt4 key购买 nike

这是我的正则表达式

((?:(?:'[^']*')|[^;])*)[;]

它在分号上标记字符串。例如,

Hello world; I am having a problem; using regex;

结果是三个字符串

Hello world
I am having a problem
using regex

但是当我使用一个大的输入字符串时,我得到这个错误

Exception in thread "main" java.lang.StackOverflowError
at java.util.regex.Pattern$GroupHead.match(Pattern.java:4168)
at java.util.regex.Pattern$Loop.match(Pattern.java:4295)
at java.util.regex.Pattern$GroupTail.match(Pattern.java:4227)
at java.util.regex.Pattern$BranchConn.match(Pattern.java:4078)
at java.util.regex.Pattern$CharProperty.match(Pattern.java:3345)
at java.util.regex.Pattern$Branch.match(Pattern.java:4114)
at java.util.regex.Pattern$GroupHead.match(Pattern.java:4168)
at java.util.regex.Pattern$Loop.match(Pattern.java:4295)
at java.util.regex.Pattern$GroupTail.match(Pattern.java:4227)

这是怎么引起的,我该如何解决?

最佳答案

不幸的是,Java 的内置正则表达式支持在包含重复替代路径(即 (A|B)*)的正则表达式方面存在问题。这被编译成递归调用,当用于非常大的字符串时会导致 StackOverflow 错误。

一个可能的解决方案是重写您的正则表达式以不使用重复的替代方案,但如果您的目标是在分号上标记字符串,您实际上根本不需要复杂的正则表达式,只需使用 String.split()用一个简单的 ";" 作为参数。

关于使用 RegEx 解析大字符串时出现 java.lang.StackOverflowError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47803497/

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