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

时间:2017-01-25 07:03:34

标签: java regex eclipse multiline

我想在我的代码中搜索for循环条件中的所有for循环。我为此创建了regrex。

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

这适用于以下代码:

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

但不适合

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

我应该在regrex中添加什么才能使其正常工作?

我想放一些regrex而不是&#34; .*\s*&#34;所以它会搜索多行。

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

1 个答案:

答案 0 :(得分:2)

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

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

你看&#34;。*&#34;表示:任何出现任何char。添加&#34;?&#34;意思是:至少一次。 任何时候一次......如上所述:没有意义。

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

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

  1. for construct
  2. 空格
  3. for construct
  4. 正如您可能已经注意到自己 - 多行部分正常运行。您当前的模式已经很好地匹配两行。但当然它可以匹配你的第二个例子。因为你的第二个代表

    1. for construct
    2. 空格
    3. somecode
    4. 空格
    5. for construct
    6. 为了解释这一点,让我们来看看:

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

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

      所以,对我来说

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

      匹配你的for循环结构。

      这里的问题:如果&#34; somecode&#34;将是两行,你需要再次放另一个&#34;行内容匹配器&#34;进入正则表达式。

      我试过

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

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

      (这并不令人惊讶,因为question明确表示&#34;计算&#34;,又名&#34;无限期&#34;结构不能用于正则表达式)