匹配 /src/main/{any_package}/*.java 的正则表达式

Regex to match /src/main/{any_package}/*.java

我需要一个 Regex 用于仅包含来自 /src/main/java/{any_package}/*.java 的文件的集合,以便仅将 CheckStyle 规则应用于 Eclipse 中的这些文件。

所有其他文件,例如:none *.java 文件,src/test/ 应被忽略。

我正在寻找的正则表达式是 src[\/]main\/java\/?(?:[^\/]+\/?)*.java$

Regex 101 test demo

也许,这个表达式在这里也能起作用,即使你原来的表达式没问题。

^\/src\/main\/java(\/[^\/]+)?\/\*\.java$

Demo 1

我的猜测是我们希望通过:

/src/main/java/{any_package}/*.java
/src/main/java/*.java

如果不需要第二个,那么我们只需删除可选组:

^\/src\/main\/java(\/[^\/]+)\/\*\.java$

Demo 2

它可能仍然有效。

测试

import java.util.regex.Matcher;
import java.util.regex.Pattern;

final String regex = "^\/src\/main\/java(\/[^\/]+)\/\*\.java$";
final String string = "/src/main/java/{any_package}/*.java\n"
     + "/src/main/java/*.java";

final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);

while (matcher.find()) {
    System.out.println("Full match: " + matcher.group(0));
    for (int i = 1; i <= matcher.groupCount(); i++) {
        System.out.println("Group " + i + ": " + matcher.group(i));
    }
}

正则表达式电路

jex.im 可视化正则表达式: