I'm having trouble specifying a regex group (()?
) containing a newline character (\n
) in the RegexpHeader
module of the maven-checkstyle-plugin
, e.g.
<module name="Checker">
<module name="RegexpHeader">
<property
name="header"
value="a\nb"/>
<property name="fileExtensions" value="java"/>
</module>
</module>
where as value="a(\nc)?b"
fails with error 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: line 1 in header specification is not a regular expression -> [Help 1]
.
According to the RegexpHeader docs
Individual header lines must be separated by the string "\n"
Which explains that the regex causes an error, yet it prevents specification of regular expressions with optional groups containing a newline character. Examples for this case are also not specified.
Solutions which don't work:
\n
with \\n
and \\\n
doesn't work (causes the same error as above).value="/*a(\x10c)?b*/\n"
matches a file starting with
/*ab*/
bla bla
but not
/*a
cb*/
bla bla
checkstyle
XML file
or \x0A
for newline charactersvalue="/\*a cb\*/\n"
matches
/*a
cb*/
bla bla
so it seem to be the regex control characters (()?
) which are causing trouble.
I'm using the maven-checkstyle-plugin
2.17 and Java 7.
I created https://github.com/krichter722/maven-checkstyle-plugin-multiline in order to facilitate investigating.
Try a multiline mode where ^
and $
match start/end of each line:
(?m)a($\s+^c)?b
You may have to experiment a bit with how to code the backslash.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With