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

Java Eclipse文件搜索对话框-组联合和否定的正则表达式,java,regex,eclipse,Java,Regex,Eclipse,我想在任何给定的项目/工作区内的给定文件类型中搜索两个(或更多)单词(或者您可以说是group) 我需要一个高效的正则表达式,用于以下查询(在多行模式下),以使用eclipse文件搜索对话框(请参见下图。您可以按Ctrl+H打开搜索对话框) 单词1先出现,然后单词2出现 单词1出现,但单词2不得出现在任何地方 Word 1和Word 2必须出现在文件中的任何位置(顺序不重要,即组联合) 单词1不得出现在文件中的任何位置。(即组否定) Word 1出现或Word 2出现在文件中的任何位置(顺序无

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

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

  • 单词1先出现,然后单词2出现
  • 单词1出现,但单词2不得出现在任何地方
  • Word 1和Word 2必须出现在文件中的任何位置(顺序不重要,即组联合)
  • 单词1不得出现在文件中的任何位置。(即组否定)
  • Word 1出现或Word 2出现在文件中的任何位置(顺序无关紧要)
  • 编辑 我得到了第一名

  • (m)(s)(单词1)。*(单词2)

  • 但不适用于其他人。

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

    对于单个单词,您可以只搜索
    单词
    ,但由于您希望使用无界量词搜索组合,因此执行效果不太好

    因此,您必须做的第一件事是通过添加锚
    \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)
    告诉
    word1
    word2
    满足的条件是直截了当的


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

    为每个单独的单词至少发布一次尝试。此问题看起来更像一个需求文档。您说有效吗?使用贪婪的
    *
    当然不符合条件。想想当第一个单词后面紧跟着第二个必需单词时会发生什么。。。用最少的谷歌搜索应该很容易,唯一的小技巧是否定-这需要一个否定的前瞻。这是理论上的正则表达式,还是允许您在Java(ir)正则表达式中使用高级功能?基本上我需要在eclipse中搜索Java文件。i、 在文件搜索对话框中输入e。谢谢您的回答。它有很好的解释。我编辑了我的问题并对我的问题编号。为了帮助他人,请编辑您的答案,并用数字标记问题的答案。@Chandrayya G K:非常感谢您。测试了所有点,工作正常。仅供参考,我对您的答案进行了轻微编辑,并重新排列了各点的顺序。