<Data>(?<data>(?:.|\r|\n)+?)</Data>
上面的正则表达式与matcher.find()
方法一起使用,以读取“数据”捕获组,并按预期工作,直到提供的输入字符串长度超过1,200个字符左右,在这种情况下会导致堆栈溢出。
可以重写上面的正则表达式以避免堆栈溢出问题吗?
有关堆栈溢出问题来源的更多详细信息:
有时,regexpattern
类会抛出StackOverflowError
。这是已知bug#5050507的一种表现,该bug#5050507自Java1.4以来一直存在于Java.util.regex
包中。bug在这里停留,因为它有“无法修复”的状态。发生此错误的原因是pattern
类将正则表达式编译为一个小程序,然后执行该小程序以查找匹配项。这个程序是递归使用的,有时当进行太多的递归调用时,就会出现这个错误。有关更多详细信息,请参阅bug的说明。它似乎主要是由交替的使用引发的。
您的regex(有交替)匹配两个标记之间的任何1+字符。
(?s)<Data>(?<data>.+?)</Data>
<Data>(?<data>[^<]*(?:<(?!/?Data>)[^<]*)*)</Data>
问题内容: 该类的标准实现使用递归来实现多种形式的正则表达式(例如,某些运算符,替换)。 这种方法会导致输入字符串超过(相对较小)长度(可能不超过1,000个字符)的堆栈溢出问题,具体取决于所涉及的正则表达式。 一个典型的例子是以下正则表达式,它使用交替从周围的XML字符串中提取可能的多行元素(名为),该元素已经提供了: 上面的正则表达式与该方法一起使用,以读取“数据”捕获组并按预期工作,直到提供
问题内容: 这有效:http : //play.golang.org/p/-Kv3xAguDR。 这导致堆栈溢出:http : //play.golang.org/p/1-AsHFj51O。 我不明白为什么。在这种情况下,使用接口的正确方法是什么? 问题答案: 这个 将呼叫您的,依次呼叫,等等。如果您需要解组JSON然后对其进行处理,那么一种巧妙的技术是声明一个本地类型,将数据解组到其中,然后转换
我正在使用一个正则表达式从任意长的输入字符串中提取键值对,并且遇到了这样的情况:对于具有重复模式的长字符串,它会导致堆栈溢出。 KV解析代码如下所示: 一些虚构的输出示例: 我显式地将generic放在上面,而不是在解析之前检查最大字符串长度的hacks(例如)。 我能想出的最粗俗的解决方法,一个真正的反模式,是 有趣的是,它在我试过的几次运行中都起作用了,但它不是一个值得推荐的有品位的东西。:-
我找不到堆栈溢出的来源,但似乎是外部的循环造成的。 提前道谢!
问题内容: TL; DR: 将任何非内置函数添加到Array.prototype AND Function.prototype将导致IE8本机JSON解析器在解析包含数组的任何JSON时发生堆栈溢出,但仅当您还传递了reviver函数时放入JSON.parse()。 最初这是一个问题,但我回答了我自己的原始问题,所以现在我要问:有人能想到此IE8错误的解决方法,该方法不涉及消除所有修改Array.
我有一个名为User的实体,它有一组角色。我还有一个角色实体,它有一组用户。(这只是出于学习目的的实践应用。) 问题是——我有一个UserController(REST API)来发送用户列表——这会导致StackOverFlow错误。用户试图加载角色,而角色又试图加载用户等。 我的问题是——如何避免这种情况?我也看到许多类似的设计。例如:https://viralpatel.net/blogs/