【发布时间】:2016-12-17 10:19:53
【问题描述】:
JavaPattern 类的标准实现使用递归来实现多种形式的正则表达式(例如,某些运算符、交替)。
这种方法会导致超过(相对较小)长度的输入字符串出现堆栈溢出问题,长度可能不超过 1,000 个字符,具体取决于所涉及的正则表达式。
这方面的一个典型示例是以下正则表达式,它使用交替从已经提供的周围 XML 字符串中提取可能的多行元素(名为 Data):
<Data>(?<data>(?:.|\r|\n)+?)</Data>
上面的正则表达式与Matcher.find()方法一起使用来读取“数据”捕获组并按预期工作,直到提供的输入字符串的长度超过1200个字符左右,在这种情况下会导致堆栈溢出.
可以重写上面的正则表达式来避免堆栈溢出问题吗?
【问题讨论】:
-
你不应该使用正则表达式来解析像 XML 这样的问题。 XML 解析器并不难找到。
-
当然!我们确实使用了 XML 解析器,但在此之前我们正在进行一些文本预处理,这比上面的示例更复杂。 :-)
标签: java regex pattern-matching stack-overflow matcher