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

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

提问人:blekione 提问时间:5/16/2019 最后编辑:blekione 更新时间:6/16/2019 访问量:299

问:

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

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

Java 正则表达式 Eclipse CheckStyle

评论

0赞 Lino 5/16/2019
当您可以使用 jdk 提供的类时,为什么还要使用正则表达式?等。。。?PathFiles

答:

-1赞 blekione 5/16/2019 #1

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

正则表达式 101 测试演示

评论

0赞 Andreas 5/16/2019
这个问题和自我回答是没有用的。这只是无数个示例中的一个例子,这些示例说明了如何编写正则表达式来匹配模式。你真的认为 StackOverflow 应该充满人们可以想象到的每种模式的例子吗?那没用。
0赞 blekione 5/16/2019
公平点。我写它更多是为了给自己参考。我不是正则表达式大师,今天这不是我第一次在互联网上询问这个正则表达式,但没有成功。下次我会寻找它(它迟早会发生)我会知道在哪里寻找。或者也许是时候创建私人维基了?
0赞 Andreas 5/16/2019
私有 wiki 听起来像是存储自制代码片段以供重用的正确位置。如果你想分享你的片段,你甚至可以把它变成一个(半)公共的wiki,但StackOverflow不适合这个。
1赞 Emma 6/16/2019 #2

也许,这个表达式在这里也起作用,即使你的原始表达式是好的。

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

演示 1

我的猜测是,我们希望在这里通过:

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

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

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

演示 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 可视化正则表达式:

enter image description here