Java性能问题中的正则表达式

时间:2015-02-10 09:52:34

标签: java regex

我想使用以下Java代码提取HTML-body-Tags中的所有文本:

Pattern.compile(".*<\\s*body\\s*>(.*?)<\\s*/\\s*body\\s*>.*", Pattern.DOTALL);

...

matcher.find() ? matcher.group(1) : originalText

对于html工作正常,但是对于不包含任何html(并且没有任何body元素)的较大文本,e.G。更大的堆栈跟踪调用 matcher.find()会占用大量时间。

有谁知道原因是什么?如何使这个正则表达式更高效?

提前致谢!

1 个答案:

答案 0 :(得分:2)

reg exp现在是:

<\\s*?body\\s*?>(.*?)<\\s*?/\\s*?body\\s*?>

表达式开头和结尾处的.*已被删除,现在它正常且快速地运行。此外,所有量词现在都不贪婪。

感谢提供有用的评论