Eclipse:如何搜索字符串,但不在注释中

时间:2013-03-28 18:20:20

标签: regex eclipse

如何在源代码中搜索“*”(乘法运算符)?

不是星号字符(在评论中等等)。只是操作员*!

/** foo method */    // <- this should not be in search results 
public int foo(int i, int j)
{      
    /* compute the values */ // <- this should not be in search results 
    return i * j;            // <- this should be in search results 
}

3 个答案:

答案 0 :(得分:1)

这个正则表达式解决了这个问题:

^(?!\s*(//|\*|/\*)).*\*

答案 1 :(得分:0)

这是不可能的。 Eclipse文件搜索不了解注释,因此您无法轻松地在注释中排除结果。 (语义)Java搜索不允许搜索运算符,只搜索类型,方法等(搜索对话框的弱点,允许搜索不是合法标识符的文本 - 它看起来像文本搜索,但它不是)。

因此,您只能使用正则表达式来帮助自己进行文件搜索,这可能适用于大多数情况,但不会100%正确,并且根据注释的样式和源中的字符串文字可能会失败。

编写一个正则表达式,搜索除“//”,“/ ”或(“”在行的开头或仅在空格之后)的所有*。特别是最后一种情况可能会有问题,这取决于你打破长期数学术语的地方。如果将操作符留在上一行的最后一个符号上,则它是没有问题的,如果它是新行的第一个符号。在这种情况下,根据搜索的紧急程度,您可能会考虑重新格式化搜索的来源。在Eclipse中重新格式化所有内容非常容易。

答案 2 :(得分:0)

您可以使用正则表达式搜索来搜索Eclipse,我已经找到了要使用的正则表达式。您可以看到示例here。这个例子有一堆我用来测试正则表达式的不同类型的注释块。

(?mx)(?<![\/\*+\n])\*+(?![\n\*+\/])

它涉及3件的组合:

  1. /后面有一个或多个*的负面看法,这表示评论的开始。
  2. 我们正在寻找的实际匹配\*+,或“一个或多个”*
  3. 对于任何数字后跟*的评论数据块/的结尾,将显示否定。
  4. 开头的mx告诉正则表达式查看多行。因此,当它触发时,它正在查找中间模式\*+,其前面没有任何开始注释,并且不以任何结束注释结束(无论使用多少*个。)

    可以更改此内容以查找Java评论中未包含的任何模式,无论评论的“艺术”有多大或多疯狂。使用(?mx)(?<![\/\*+\n])PATTERN_GOES_HERE(?![\n\*+\/])并将PATTERN_GOES_HERE替换为模式以搜索未包含在评论中。这将允许您插入任何您需要的疯狂模式,其中未包含在注释中的重要部分由负面看后面/前面处理。