java - 是否可以将正则表达式简化为匹配?

标签 java regex performance optimization

我有一些针对很长字符串运行的正则表达式。然而,字符串中唯一与 RE 相关的部分是在开头附近。大多数 RE 类似于:

\\s+?(\\w+?).*

RE 捕获开头附近的几个组,并且不关心字符串的其余部分是什么。出于性能原因,有没有办法让 RE 引擎避免查看终止 .* 消耗的所有字符?

注意:带有 RE 的应用程序是使用 java.regex 类编写的。

编辑:例如,我有以下 RE:

.*?id="number"[^>]*?>([^<]+?).*

它针对存储为 StringBuilder 的大型 HTML 文件运行。带有 id="number" 的标记始终位于 HTML 文件的开头附近。

最佳答案

使用 java.util.regex 类时,有多种方法可以匹配给定的字符串。 Matcher.matches 始终与整个输入字符串匹配。 Matcher.find 在输入字符串的某处查找与正则表达式匹配的内容。最后,Matcher.lookingAt 将正则表达式与输入字符串的开头进行匹配。

如果您使用 Matcher.matches,您可能需要在末尾添加 .* 来匹配整个字符串。但是,您可能最好使用其他方法之一,这样您就可以省略 .*。听起来 Matcher.lookingAt 可能适合您的目的。

关于java - 是否可以将正则表达式简化为匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1220332/

相关文章:

c# - 正则表达式不起作用

javascript - 无法弄清楚为什么我的网站加载如此慢

performance - drawRect 性能

java - 遗传算法的适应度拒绝让步

java - Apache Spark JSON 读取错误 - java.lang.IllegalArgumentException : Illegal pattern component: XXX

Python SpaCy Regex 不提取包含单词的标记

regex - 使用正则表达式通过 Google BigQuery 从 URL 中提取产品名称

java - 设置 java.library.path 进行测试

java - 将外部 jar (lib/*.jar) 添加到 IntelliJ IDEA 项目的正确方法

android - 果冻 bean 上TextView的requestFocus慢