Java Eclipse文件搜索对话框-组联合和否定的正则表达式
我想在任何给定的项目/工作区内的给定文件类型中搜索两个(或更多)单词(或者您可以说是group) 我需要一个高效的正则表达式,用于以下查询(在多行模式下),以使用eclipse文件搜索对话框(请参见下图。您可以按Ctrl+H打开搜索对话框)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出现在文件中的任何位置(顺序无
但不适用于其他人。当您想要提高搜索效率时,您必须了解不同的目标: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:非常感谢您。测试了所有点,工作正常。仅供参考,我对您的答案进行了轻微编辑,并重新排列了各点的顺序。