Ich möchte eine Variablendeklarationsanweisung analysieren und den Variablennamen erhalten. Ich mache das unten
%Vor%Ich verwende das folgende Regex-Muster, um die obige Zeichenfolge zu finden
%Vor%Es funktioniert nicht. Es sagt, dass keine Übereinstimmung gefunden wurde. Kann jemand bitte helfen.
Entfernen Sie zuerst diesen Punkt vom Anfang der Regex, da ein Zeichen vor dem private
für eine Übereinstimmung erforderlich ist.
Zweitens, Ihre Regex unterscheidet zwischen Groß- und Kleinschreibung und passt nicht zum Großbuchstaben. Verwenden Sie entweder [a-zA-Z]
oder den Ausdruck case insensitive ( (?i)
am Anfang IIRC).
Btw, [a-zA-Z0-9_]
wäre dasselbe wie \w
.
Eine andere Sache: Ihr Ausdruck würde auch illegale Variablennamen aufspüren und auch legale ersetzen. Variablen dürfen nicht mit einer Zahl beginnen, aber sie können auch Dollarzeichen enthalten. Daher sollte der Name-Ausdruck etwas wie ([a-zA-Z_$][\w$]*)
sein, was bedeutet, dass das erste Zeichen ein Buchstabe, ein Unterstrich oder ein Dollarzeichen sein muss, gefolgt von einer beliebigen Anzahl von Wortzeichen oder Dollarzeichen.
Eine letzte Anmerkung: Je nachdem, was Sie mit diesen Deklarationen tun, denken Sie daran, dass Sie nach diesen reservierten Wörtern suchen müssen. Der angepasste Ausdruck würde beispielsweise weiterhin mit "private String private"
übereinstimmen.
Noch eine letzte Anmerkung: Denken Sie daran, dass es möglicherweise mehr Modifikatoren als private
für eine Variable, z. public
, protected
, static
usw. - oder gar nicht.
Bearbeiten :
Nun, da Sie das Sternchen nach dem ersten Punkt haben, sollte das kein Problem für Ihren Sonderfall sein. Ein Punkt entspricht jedoch fast jedem Zeichen und würde daher auch fooprivate
entsprechen. Abhängig davon, was Sie erreichen möchten, entfernen Sie entweder den Punkt oder fügen Sie einen \s+
nach dem .*
hinzu.
Da die Deklaration einer Variablen in Java mehr als 3 Wörter vor dem Variablennamen haben kann, würde ich vorschlagen, dass Sie Ihre Suche nicht einschränken und verwenden Sie dies:
%Vor%Es wird nach einem beliebigen Variablennamen gesucht, der mit einem Leerzeichen beginnt und entweder mit ";" oder "=". Dies ist eine allgemeinere Suche nach dem Variablennamen.
BEARBEITEN Das hat mich wirklich zum Nachdenken gebracht, da dies auch eine gesetzliche Erklärung in Java ist:
%Vor%Dies könnte tatsächlich verbessert werden, wahrscheinlich weil es schnell gedacht / getan wurde.
%Vor% .*private\s+(\w*)\s+(\w*);
Verwende dieses Muster. [a-z] ist ein Kleinbuchstabe, aber "String" in Ihrem Text beginnt mit Großbuchstaben S
. \w
ist ein Wortzeichen. Es ist das gleiche wie [a-zA-Z0-9_]
Es sieht so aus, als wären Ihre Texte wie "private <type> <field name>;"
und wenn es so ist, kann Ihr Typ Großbuchstaben, Zahlen oder Unterstreichungen enthalten, also ist das Schreiben von \w
eine gute Lösung.