Regex zur Übereinstimmung der Variablendeklaration in Java

7

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.

    
Krishnaveni 08.02.2012, 07:37
quelle

5 Antworten

10

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.

    
Thomas 08.02.2012 07:41
quelle
5

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%     
Eugene 08.02.2012 07:52
quelle
3

Sehen Sie sich die Checkstyle-Regex-Muster für Namenskonventionen an (Typen, Methoden, Pakete usw.). Weitere Informationen hier .

    
Kris 08.02.2012 07:55
quelle
3

.*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.

    
shift66 08.02.2012 07:40
quelle
3

Sie sollten diese Regex verwenden:

%Vor%

Dies stellt sicher, dass sie übereinstimmen:

  • Groß- / Kleinschreibung wird nicht berücksichtigt, außer Keyword private
  • Mehrzeilige Deklarationen
  • Leerzeichen am Anfang, Ende und in der Mitte
anubhava 08.02.2012 07:46
quelle

Tags und Links