Eclipse 文件搜索对话框 - 组联合和否定的正则表达式

Cha*_*G K 3 java regex eclipse

我想在任何给定项目/工作区中的给定文件类型中搜索两个(或更多)单词(或者您可以说组)。

我需要一个用于以下查询的高效正则表达式(在多行模式下)以使用它 eclipse文件搜索对话框(见下图。您可以按Ctrl+打开搜索对话框H

在此处输入图片说明

  1. 单词 1 先出现,然后单词 2 出现
  2. Word 1 出现但 Word 2 不得出现在任何地方。
  3. Word 1 和 Word 2 都必须出现在文件中的任何地方(顺序无关紧要,即组联合)
  4. Word 1 不得出现在文件中的任何地方。(即组否定)
  5. Word 1 Present OR Word 2 Present ANYWHERE 在文件中(顺序无关紧要)

编辑

我得到了第一

  1. (?m)(?s)(Word 1).*(Word 2)

但不是对其他人。

Hol*_*ger 5

当您想提高搜索效率时,您必须了解不同的目标:Eclipse 搜索功能会查找所有出现的内容,但您只想检查是否存在某个单词。

对于单个单词,您可以只搜索,word但由于您想使用无界量词搜索组合,因此效果不佳。

因此,您必须做的第一件事是通过添加\A代表“文件开头”的锚点来阻止 Eclipse(正则表达式引擎)检查文件每个字符位置的匹配。然后跳过尽可能少的字符并搜索文字匹配以检查是否存在:

(?s)\A.*?word将搜索第一次出现,word但不再搜索。

扩展它以按顺序检查两个单词很容易:

(1)(?s)\A.*?word1.*?word2仅按顺序检查每个单词出现一次,仅此而已。

要在没有订单的情况下检查存在与否,您可以使用前瞻:

(2)(?s)\A(?!.*?word2).*?word1简单地否定前瞻来告诉word2一定不存在......

(3)(?s)\A(?=.*?word1).*?word2如果存在一个匹配项,word1则找到一个匹配项word2;当然,word1并且word2可以互换。

(4)(?s)\A(?!.*?word1).?并且只使用否定前瞻来搜索word1唯一的不存在;如果不存在.?只匹配一个可选字符,因为空的正则表达式将不匹配DOTALL模式中的任何内容。

(5)(?s)\A.*?(word1|word2)告诉要么word1word2满足是直接的。

当然,如果您要查找整个单词,则word必须将上面的占位符替换为\bactualwordcharacters\b.