【发布时间】:2019-01-13 20:35:44
【问题描述】:
我已经阅读了一些关于如何优化正则表达式的文章,但没有一个答案(较少的组,使用 {X,Y} 而不是 *)似乎阻止我的正则表达式出现堆栈溢出错误。
我正在尝试通过文件进行动态搜索。假设我在一个非常大(2-4 mb)的文件中搜索“我打赌你找不到我”。我的正则表达式生成器会生成正则表达式:
i(?:.|\s)*?bet(?:.|\s)*?you(?:.|\s)*?cannot(?:.|\s)*?find(?:.|\s)*?me
这个正则表达式的想法是,无论单词之间有什么字符或空格,它都能找到准确的短语。但是,当我尝试使用时:
Pattern p = Pattern.compile(generatedRegex, Pattern.MULTILINE);
Matcher m = p.matcher(fileContentsAsString);
while (m.find()) {
System.out.println(m.group())
}
我收到堆栈溢出错误。我知道正则表达式使用递归,但似乎这不是正则表达式的坏处。有什么办法可以优化这个正则表达式吗?谢谢!
答案:
Pattern p = Pattern.compile("i(?:.*)bet(?:.*)you(?:.*)cannot(?:.*)find(?:.*?)me", Pattern.DOTALL);
是我最终使用的模式/正则表达式。似乎很快并且不再出现堆栈溢出异常
【问题讨论】:
标签: java html regex recursion stack-overflow