java - 如何在Eclipse中进行多行搜索?

标签 java regex eclipse multiline

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

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

这适用于如下代码:

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

但不适用于

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

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

我想放置一些正则表达式而不是“.*\s*”,这样它将搜索多行。

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

最佳答案

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

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

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

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

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

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

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

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

为了解释这一点,让我们看一下:

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

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

所以,对我来说

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

与您的两个 for 循环结构相匹配。

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

我试过了

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

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

(这并不奇怪,因为 question 清楚地表明“计数”,又名“不定”结构不能与正则表达式一起使用)

关于java - 如何在Eclipse中进行多行搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41845368/

相关文章:

java - 正则表达式字符集 [^\\w\\d\\s\\&] 不起作用

java - Eclipse 无法识别匿名内部类

java - FTPClient - 550 权限被拒绝

Java图像图标数组

java - Adobe Experience Manager 路径的完整 URL

javascript - 如何替换 ../../为 d :/in my ajax response in JavaScript?

php - 使用正则表达式将字符串拆分成句子

java - STS 全部构建按钮呈灰色

java - 由于 maven-surefire-plugin,Maven 构建失败

java - 在 Struts 1.1 中抛出 "No bean specified Error"的可能原因是什么?