Eclipse 如何对短语/正则表达式的命中执行如此快速的搜索

Posted

技术标签:

【中文标题】Eclipse 如何对短语/正则表达式的命中执行如此快速的搜索【英文标题】:How does Eclipse execute such a fast search for hits to a phrase/regexp 【发布时间】:2012-08-27 08:11:24 【问题描述】:

Eclipse 以惊人的速度在大型项目中搜索与某个短语(甚至是正则表达式短语)的所有匹配项。

他们是否在内部使用java.util.regex? 我假设他们没有使用搜索引擎进行索引,因为他们的搜索速度太慢了,但是在启动 eclipse 后第一次进行搜索时会有一些延迟。

【问题讨论】:

我认为他们确实使用了一些索引器,其索引存储在 .metadata/.plugins/org.eclipse.jdt.core 中 但是索引器在一般的正则表达式搜索中表现不佳,这在 eclipse 中似乎也相当快。 eclipse 极大地提高了与代码查找相关的任务的性能,例如搜索引用、创建类型层次结构甚至代码完成。这是由于受 nWire 启发的一种新设计,它使用 h2 数据库引擎作为该数据的持久存储。 @DinupKandel 您应该将该评论转换为答案并提供来源;) 【参考方案1】:

Eclipse Helios (3.6) 包括 Eclipse PDT 的改进版本, 标记为 2.2。它也包含在当前的 Zend Studio(7.1 和 更多)。在其他增强功能中,它显着改善了 执行与代码查找相关的任务,例如搜索参考, 创建类型层次结构甚至代码完成。这是由于一个 新设计,灵感来自 nWire,它使用 h2 数据库引擎作为 此数据的持久存储。

h2 数据库是一个高性能、低配置的 Java 原生数据库 数据库引擎,作为广泛使用的 HSQLDB 的继任者而创建。它 是开源的并且可以免费使用。 nWire 从早期就使用 h2。

来源:http://www.nwiresoftware.com/blogs/nwire/2010/09/five-tips-speeding-eclipse-pdt-and-nwire

简而言之,您似乎看到了这些改进,因为 Eclipse 使用了h2 数据库引擎。

然后,如果你再深入一点,这里是quick sampling if the H2 source code;看起来他们确实在利用java.util.regex

20 import java.util.regex.Matcher;
21 import java.util.regex.Pattern;

【讨论】:

以上是关于Eclipse 如何对短语/正则表达式的命中执行如此快速的搜索的主要内容,如果未能解决你的问题,请参考以下文章

如何在 HTTP 响应正文中使用正则表达式搜索短语

如何使用正则表达式删除 std::wstring 中特定短语的所有实例?

如何优化正则表达式性能?

结合中文分词和正则识别语句中的结构化数据或短语

正则表达式 URL 帮助:单词或短语

正则表达式:匹配文本段落中除特定短语外的所有内容