gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:15:00 27 4
gpt4 key购买 nike

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

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

enter image description here

  1. Word 1 在前,然后是 Word 2
  2. Word 1 出现但 Word 2 不得出现在任何地方。
  3. Word 1 和 Word 2 都必须出现在文件中的任何位置(顺序无关紧要,即组并集)
  4. Word 1 不得出现在文件中的任何位置。(即组否定)
  5. Word 1 Present OR Word 2 Present 在文件中的任何位置(顺序无关紧要)

编辑

我得了第一名

  1. (?m)(?s)(单词 1).*(单词 2)

但不适合其他人。

最佳答案

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

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

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

(?s)\A.*?word将搜索第一次出现的 word但不会进一步。

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

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

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

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

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

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

(5) (?s)\A.*?(word1|word2)告诉word1word2满足是直截了当的。

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

关于java - Eclipse 文件搜索对话框 - 组联合和否定的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21577308/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com