环境
java:12
idea:2022.1.3
前言
做一个正则匹配的时候,类似相同的字符串文本,有些匹配成功,有些匹配报堆栈溢出StackOverflowError
。
一开始以为是文本过大的缘故。而实际上是正则表达式的问题,其在匹配子串时,匹配到了大量的文本。
类似的效果就是:原本应该命中15个匹配结果。结果值命中了三个,其中12个文本被正则表达式命中为一个(相当于一个超大文本)。
匹配超大文本本身就是没有意义的。jdk的底层暂时没看,不过底层肯定用了递归。
解决办法
当出现匹配的Pattern java.lang.StackOverflowError
时,很有可能因为命中大文本造成的,这时需要优化正则表达式,让其命中多个结果,而不是一个大文本。