如何在 Eclipse 中执行多行搜索?

How to perform multi line search in Eclipse?

我想在我的 code.I 中的 for 循环条件内搜索所有 for 循环,为此创建了正则表达式。

for?\(.*?;.*?;.*?\).*\s*for?\(.*?;.*?;.*?\)

这适用于像这样的代码:

for(int i=0; i<StartTags.length; i++){
        for(int j=0; j<StartTags.length; j++){

但不适用于

for(;;) 
    {
        somecode;
            for(;;)
            {
                someOtherCode;
            }
    }

我应该在正则表达式中添加什么才能使其正常工作?

我想用一些正则表达式代替“.*\s*”,这样它会搜索多行。

for?\(.*?;.*?;.*?\).*\s*for?\(.*?;.*?;.*?\)

首先,您可以将正则表达式简化为:

for?\(.*;.*;.*\).*\s*for?\(.*;.*;.*\)

您看到“.*”表示:任何 出现任何字符。添加一个“?”意思是:至少一次。 任何时候一次...正如所说:没有意义。

但除此之外:我只是建议分开你的两个案例。

除此之外:您当前的模式寻找

  1. 构建
  2. 空格
  3. 构建

正如您自己可能已经注意到的那样 - multiline 部分可以正常工作。您当前的模式已经很好地匹配了两行。但是当然它可以匹配你的第二个例子。因为你的第二个代表

  1. 构建
  2. 空格
  3. 一些代码
  4. 空格
  5. 构建

为了说明这一点,让我们看看这个:

for?\(.*;.*;.*\).*\s*.*\s*for?\(.*;.*;.*\)

换句话说:对于构造之间的 each 行,您需要 one .*\s*

所以,对我来说

for?\(.*;.*;.*\).*\s*.*\s*.*\s*for?\(.*;.*;.*\)

匹配你的两个 for 循环结构。

这里的问题:如果 "somecode" 是两行,您需要再次 将另一个 "line-content-matcher" 条目放入正则表达式。

我试过了

for?\(.*;.*;.*\)(.*\s*)*for?\(.*;.*;.*\)

但至少对我来说,这会导致 eclipse 崩溃。

(这并不奇怪,因为这个 question 清楚地表明 "counting",又名 "indefinite" 结构不能与正则表达式一起使用)