4

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

不是星号字符(在评论等中)。只是运算符 *!

/** 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 
}
4

3 回答 3

1

这个正则表达式成功了:

^(?!\s*(//|\*|/\*)).*\*
于 2013-03-28T20:24:02.790 回答
0

这是不可能的。Eclipse 文件搜索不知道注释,因此您不能轻易地排除注释中的结果。(语义)Java 搜索不允许搜索运算符,仅搜索类型、方法等(搜索对话框的一个弱点是允许搜索非合法标识符的文本 - 它看起来像文本搜索,但实际上不是)。

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

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

于 2013-03-28T18:49:44.310 回答
0

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

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

它涉及 3 个部分的组合:

  1. 否定看后面 on/后跟 1 或更多*,这表示注释的开始。
  2. 我们正在寻找的实际匹配\*+,或“一个或多个”*
  3. Negative 以任意数字向前看注释块的结尾,*后跟一个/.

mx开头的 告诉正则表达式查看多行。因此,当它触发时,它正在寻找\*+没有任何开始注释的中间模式,并且没有以任何结束注释结束(不管*使用了多少 s)。

这可以更改为查找 Java 注释中不包含的任何模式,无论注释的“艺术”有多大或有多疯狂。通过使用(?mx)(?<![\/\*+\n])PATTERN_GOES_HERE(?![\n\*+\/])和替换PATTERN_GOES_HERE模式来搜索不包含在评论中。这将让你插入任何你需要的疯狂模式,其中不包含在评论中的重要部分由负面的观察来处理。

于 2013-03-28T20:30:07.710 回答