Checkstyle - 如何使用正则表达式排除任何文件,但以“Impl.java”结尾的文件?

时间:2014-02-18 10:56:02

标签: regex checkstyle

我一直在考虑这个问题。

我有一个巨大的Maven多模块项目并使用构建工具我为所有模块共享一组自定义规则(这里没问题)。

当我想在一个模块中仅将一个规则应用于一组文件时,问题就出现了。通过使用checkstyle suppressions文件,我可以轻松地排除我不希望应用规则的所有文件,但它有其局限性。让我们举个例子:

文件:

a/b/c/d/FileImpl.java
a/b/c/d/File.java
a/b/c/d/e/FileImpl.java
a/b/c/FileImpl.java
...

你会写什么正则表达式,以确保所有文件(包括可能引入的未来文件)被排除,但只包括以包a.b.c.d下的Impl.java结尾的文件? 在正则表达式方面,它必须是一个正则表达式,匹配除了我想要的文件之外的任何内容。

如果我可以设置一个仅包含应用规则的文件集的“包含”,那将会更容易,但据我所知,这是不可能的。它必须使用抑制,因此它会抑制所有文件,而不是我想要的文件。

我尝试过使用捕获组,前瞻和后视,但根本没有成功。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

  

你会写什么正则表达式,以确保所有文件(包括可能引入的未来文件)被排除,但只包括以a.b.c.d包下的Impl.java结尾的文件?

试试这个正则表达式:

a/b/c/d/.+Impl\.java$

演示

http://fiddle.re/rpqgg

答案 1 :(得分:0)

找到了解决不那么明确问题的正确解决方案,希望它可以帮助任何感兴趣的人。

http://fiddle.re/9wvfg

正则表达式目标 - >匹配任何链,但匹配内部正则表达式。

正则表达式 - > ^((?!d/\w+Impl\.java).)*$

使用否定前瞻和模板:^((?!regexp).)*$

感谢您的支持!!