java - 如何在 checkstyle 的 RegexpHeader 中指定带有换行符的可选正则表达式组?

标签 java regex maven checkstyle

我在 RegexpHeader 模块中指定包含换行符 (\n) 的正则表达式组 (()?) 时遇到问题maven-checkstyle-plugin,例如

<module name="Checker">
    <module name="RegexpHeader">
        <property
            name="header"
            value="a\nb"/>
        <property name="fileExtensions" value="java"/>
    </module>
</module>

value="a(\nc)?b" 失败并出现错误 Failed to execute goal org.apache.maven.plugins:maven-checkstyle-plugin:2.17:check (check_style) on project document-scanner: Failed during checkstyle configuration: cannot initialize module RegexpHeader - Cannot set property 'header' to 'a(\nc)?b' in module RegexpHeader: InvocationTargetException: 行 1 in header specification is not a regular表达式 -> [帮助 1].

根据RegexpHeader docs

Individual header lines must be separated by the string "\n"

这解释了正则表达式会导致错误,但它会阻止使用包含换行符的可选组指定正则表达式。这种情况的例子也没有具体说明。

无效的解决方案:

  • \n 替换为 \\n\\\n 不起作用(导致与上述相同的错误)。
  • value="/*a(\x10c)?b*/\n" 匹配以

    开头的文件
    /*ab*/
    bla bla
    

    但不是

    /*a
    cb*/
    bla bla
    
  • checkstyle XML 文件中添加普通换行符
  • 为换行符添加 \x0A

value="/\*a cb\*/\n" 匹配

/*a
cb*/
bla bla

所以似乎是正则表达式控制字符 (()?) 引起了麻烦。

我正在使用 maven-checkstyle-plugin 2.17 和 Java 7。

我创建了 https://github.com/krichter722/maven-checkstyle-plugin-multiline以方便调查。

最佳答案

尝试多行模式,其中 ^$ 匹配每行的开始/结束:

(?m)a($\s+^c)?b

您可能需要尝试一下如何编写反斜杠。

关于java - 如何在 checkstyle 的 RegexpHeader 中指定带有换行符的可选正则表达式组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33266679/

相关文章:

java - 导致 java.lang.OutOfMemoryError : PermGen space error 的算法

java - 从多个客户端更新服务器上对象的模式/最佳实践

python - 将列表与列进行匹配并从列中提取匹配值

Javascript正则表达式选择第一个冒号和可选的行尾或第二个冒号之间的文本

java - 如何运行 Sonar 来分别分析每个子模块

java - Maven Findbugs 插件 - 如何在测试类上运行 findbug

java - 如何让 Maven 在测试失败时不导致构建失败

java - JButton 默认光标

java - 请求工厂 - 加载引用实体的引用实体

javascript - 这个正则表达式有什么问题 :/(? :(? :^|\s)hide_([^\s]+))+/?