Ersetze benannte Gruppen regexp in geany

8

Ich versuche, öffentliche Methoden zu geschützten Methoden für Methoden, die einen Kommentar haben, zu ersetzen.

Dies ist, weil ich phpunit verwende, um einige dieser Methoden zu testen, aber sie müssen wirklich nicht öffentlich sein, also möchte ich sie auf dem Produktionsserver wechseln und beim Testen zurückschalten.

Hier ist die Methodendeklaration:

%Vor%

Dies ist die Regexp:

%Vor%

Wenn ich es durch ersetzen:

%Vor%

Es scheint zu funktionieren, aber was ich nicht zur Arbeit bringen kann, ist das Ersetzen von mit ersetzen. Ich muss \ 1 verwenden, um die erste Gruppe zu erhalten. Warum sollten Sie die Gruppen benennen, wenn Sie in den Ersatztexten nicht darauf zugreifen können? Versuchte Dinge wie \, $ ws, \ $ ws, aber das funktioniert nicht.

Meine Frage ist: Was ist der ersetzende Text, wenn ich \ 1 durch die benannte Gruppe ersetzen möchte?

    
HMR 28.11.2012, 08:36
quelle

1 Antwort

6

Die Syntax der ?<ws> benannten Gruppe ist dieselbe wie die von .NET / Perl. Für diese Regex-Engines lautet die Ersetzungszeichenfolgenreferenz für die genannte Gruppe ${ws} . Dies bedeutet, dass Ihre Ersatzzeichenfolge lauten würde:

${ws}protected${fn}\//TODO: change back to public for testing

Die von m.buettner erwähnte \k<ws> Referenz wird nur für Rückverweise in der aktuellen Regex verwendet.

Zusatzinfo:

Scheint so, als ob Geany auch die Verwendung von Gruppen im Python-Stil erlaubt:

  • ?P<ws> ist die Erfassungssyntax
  • \g<ws> ist die Ersetzungszeichenfolgensyntax
  • (?P=ws) ist die Regex-Rückreferenzsyntax

BEARBEITEN:

Sieht meine Hoffnung für eine Lösung nicht aus. Aus dem Handbuch ,

"Ein Untermuster kann auf drei Arten benannt werden: (? ...) oder (? 'name' ...) wie in Perl, oder (? P ...) wie in Python. Referenzen zum Capturen Klammern von anderen Teilen des Musters , wie z. B. Rückreferenzen, Rekursion und Bedingungen, können sowohl nach name als auch nach Zahl gemacht werden. "

Und weiter unten:

"Rückverweise auf benannte Untermuster verwenden die Perl-Syntax \ k oder \ k'name 'oder die Python-Syntax (? P = Name)."

und

"Ein Untermuster , auf das von name verwiesen wird, kann im Muster vor oder nach dem Verweis erscheinen."

Also, meine Schlussfolgerung der Syntax für die Verwendung benannter Gruppen war korrekt. Leider können sie nur im passenden Muster verwendet werden. Das beantwortet deine Frage "Warum Gruppen benennen?".

Wie dumm ist das? Wenn Sie sich alle Mühe geben, benannte Gruppen und deren Verwendung im passenden Muster zu implementieren, warum implementieren Sie nicht auch die Verwendung in der Ersetzungszeichenfolge?

    
robinCTS 21.01.2013, 20:09
quelle

Tags und Links