Regex für übereinstimmenden "Nicht-Javadoc" -Kommentar in Eclipse

8

Ich versuche, einen regulären Ausdruck zu schreiben, der den Kommentaren (non-javadoc) im Format

entspricht %Vor%

Bisher habe ich (?s)/\*\R.*?non-Javadoc.*?\*/ , aber das stimmt eigentlich zu viel. Ich habe eine Kopfzeile oben in meiner Datei, die ungefähr so ​​aussieht wie

%Vor%

und es stimmt mit dem /* am Anfang der Datei überein, aber ich möchte wirklich nur den generierten (non-javadoc) Kommentar abgleichen. Kann mir jemand helfen, diesen Regex zu reparieren?

EDIT: Ich versuche, den Eclipse-Find / Replace-Dialog zu verwenden, aber ich bin offen für die Verwendung externer Tools, falls nötig.

    
Jeff Storey 31.05.2011, 22:55
quelle

2 Antworten

9

Das sollte es tun:

%Vor%

/\*[^*] entspricht dem Anfang eines Kommentars im C-Stil ( /* */ ), aber nicht eines JavaDoc-Kommentars ( /** */ )

(?!\*/). entspricht einem einzelnen Zeichen, es sei denn, es ist der Anfang einer */ -Sequenz. Die Suche nach (?:(?!\*/).)* anstelle von .*? verhindert, dass eine Übereinstimmung in einem Kommentar beginnt und in einem anderen endet.

UPDATE: In (verspäteter) Antwort auf den Kommentar von Jacek: Ja, Sie werden wahrscheinlich etwas am Ende der Regex hinzufügen wollen, damit Sie es durch eine leere Zeichenfolge ersetzen können und nicht lassen Sie viele Leerzeilen in Ihrem Code. Aber Jaceks Lösung ist komplizierter als nötig. Alles, was Sie hinzufügen müssen, ist \s*

Die \R Escape-Sequenz stimmt mit vielen Arten von Zeilenumbruch überein, einschließlich Unicode-Zeilentrenner ( \u2028 ) und Absatztrennzeichen ( \u2029 ) und DOS / Netzwerk-Zeilenumbruch + Zeilenvorschubsequenz ( \r\n ). Aber das sind alles Leerzeichen, also stimmt \s mit ihnen überein (zumindest in Eclipse; laut den Dokumenten ) , es entspricht [\t\n\f\r\p{Z}] ).

Das \s* in Jaceks Zusatz war nur dafür gedacht, alle horizontalen Whitespaces (Leerzeichen oder Tabulatoren) zu finden, vor dem Newline, plus dem darauf folgenden Einzug. (Sie müssen es entfernen, weil Sie nicht sind, um den Einzug vor der ersten Zeile des Kommentars zu entfernen.) Es stellt sich jedoch heraus, dass \s* den gesamten Job ausführen kann:

%Vor%     
Alan Moore 01.06.2011, 00:24
quelle
0

In Perl würde es aussehen wie

%Vor%     
ikegami 31.05.2011 23:06
quelle