【问题标题】:Checkstyle - How to exclude any file, but the ones ending with 'Impl.java', with a regex?Checkstyle - 如何使用正则表达式排除任何文件,但以“Impl.java”结尾的文件除外?
【发布时间】:2014-03-18 01:54:04
【问题描述】:

我一直在思考这个问题。

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

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

文件:

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 结尾的文件? 就正则表达式而言,它必须是匹配除我想要的文件结尾之外的任何内容的正则表达式。

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

我曾尝试使用捕获组、前瞻和后瞻,但完全没有成功。

有什么想法吗?

【问题讨论】:

  • 你有没有尝试过?请附上您尝试的解决方案...这可以帮助其他人了解您的意图。
  • 嗨,阿迪,我正在尝试制作一个通用正则表达式,它匹配除了一个以 d/FileImpl.java 结尾的链之外的所有内容,以便 Checkstyle 抑制排除所有文件,但不匹配的文件正则表达式。类似于:.+(?!d/FileImpl.java$)
  • @xOUe 将您的解决方案作为答案发布(并且可能会接受),不要将其编辑到您的问题中。在这里发布您自己问题的答案是完全有效的!
  • 新手有限制,不能在8小时前回答我自己的问题...否则我会做的,还是谢谢你!

标签: regex checkstyle


【解决方案1】:

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

试试这个正则表达式:

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

演示

http://fiddle.re/rpqgg

【讨论】:

  • 嗨亚历克斯,它不像我预期的那样工作......'?将前面的标记设为可选(在这种情况下为.+)
  • 我解释得不够清楚,我对正则表达式的期望是它匹配除 a/b/c/d/FileImpl.java 之外的任何路径文件,因此它是唯一得到的文件应用了 checkstyle 规则
  • 感谢您的链接,我将继续使用该工具
【解决方案2】:

为这个不太清楚的问题找到了正确的解决方案,希望它对任何感兴趣的人有所帮助。

http://fiddle.re/9wvfg

正则表达式目标 --> 匹配除内部正则表达式之外的任何链。

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

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

感谢支持!!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    • 2021-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-23
    相关资源
    最近更新 更多