我在 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]
.
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/