Ich habe Probleme, eine Regex-Gruppe ( ()?
) anzugeben, die ein Newline-Zeichen ( \n
) im RegexpHeader
-Modul von maven-checkstyle-plugin
, z. B.
wo as value="a(\nc)?b"
mit Fehler 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]
fehlschlägt.
Laut den RegexpHeader-Dokumenten
Einzelne Kopfzeilen müssen durch die Zeichenfolge "\ n"
getrennt sein
Dies erklärt, dass die Regex einen Fehler verursacht, verhindert jedoch die Angabe regulärer Ausdrücke mit optionalen Gruppen, die ein Zeilenumbruchzeichen enthalten. Beispiele für diesen Fall sind ebenfalls nicht angegeben.
Lösungen, die nicht funktionieren:
\n
durch \n
und \\n
funktioniert nicht (verursacht denselben Fehler wie oben). value="/*a(\x10c)?b*/\n"
stimmt mit einer Datei überein, die mit
aber nicht
%Vor%checkstyle
XML-Datei
oder \x0A
für Zeilenvorschubzeichen value="/\*a cb\*/\n"
stimmt mit
Es scheint also, dass die Regex-Steuerzeichen ( ()?
) Probleme verursachen.
Ich verwende die maven-checkstyle-plugin
2.17 und Java 7.
Ich habe Ссылка erstellt, um die Untersuchung zu erleichtern.
Ich habe Probleme mit der Verwendung von Regexen festgestellt. Ich denke, ich habe auch eine Lösung gefunden (aber ich kann es nicht testen, weil ich Maven / Checkstyle nicht verwende).
Ihre Hypothese, dass ()?
das Problem ist, ist falsch. Beim Scrollen auf der Seite für RegexpHeader gibt es ein Beispiel, das eine Regex-Gruppe wie ()?
:
Es gibt ein Problem mit Ihrer Regex hier: value="/*a(\x10c)?b*/\n"
. Du entkommst den Regex-Kontrollzeichen nicht (aber nicht denen, auf die du hingewiesen hast). Du solltest es machen:
In Java ist es notwendig, die "bösen" geflüchteten entkommen ( \
). Die Regex in ihrer reinen Form ist:
Sie können die "reine Form" verwenden, wenn sich die Regex in einer eigenen Datei befindet.
Der Volltext aus der Dokumentation besagt (Hervorhebung von mir):
Der erforderliche Header wird inline angegeben. Einzelne Kopfzeilen müssen durch die Zeichenfolge "\ n" getrennt sein (selbst auf Plattformen mit einem anderen Zeilentrennzeichen), und reguläre Ausdrücke müssen nicht mehrere Zeilen umfassen .
Dies kann bedeuten, dass Sie jede Zeile mit dem Anker ^
voranstellen müssen. Alle Beispiele, die ich gesehen habe, waren so.
Sie werden sich vielleicht wundern, wie Sie Regexes mit Javadocs (zum Beispiel) verwenden können, die ungefähr dem folgenden Format entsprechen:
%Vor%Die mittlere Zeile fehlt möglicherweise. Oder es kann 500 Zeilen wie diese geben.
Sie geben ein Beispiel für einen Header, der sich damit beschäftigt.
Hinweis: Die Wörter line ##
befinden sich wahrscheinlich nicht in der Datei.
Sehen Sie, wie sie Zeile 13 als "mehrzeilig" haben? Aus dem Dokument:
Zeilennummern zur Wiederholung (null oder mehr)
Tags und Links java maven regex checkstyle