Regex stimmt mit den Importen einer Klasse überein

8

Ich habe versucht, eine Regex zu schreiben, die den Importen einer Klasse entspricht. Lass die Klasse

sein %Vor%

Die Ausgabe sollte [org.junit.Assert. *, org.package.Test, mypackage.mystuff] sein. Ich habe mit den Zeilenumbrüchen und regulären Ausdrücken im Allgemeinen gekämpft, da ich nicht so erfahren bin. Dies ist mein aktueller Versuch:

%Vor%     
voskart 22.03.2016, 12:33
quelle

5 Antworten

4

Diese Regex sollte für alle Arten von Importanweisungen funktionieren und nicht mit ungültigen Anweisungen übereinstimmen: import\p{javaIdentifierIgnorable}*\p{javaWhitespace}+(?:static\p{javaIdentifierIgnorable}*\p{javaWhitespace}+)?(\p{javaJavaIdentifierStart}[\p{javaJavaIdentifierPart}\p{javaIdentifierIgnorable}]*(?:\p{javaWhitespace}*\.\p{javaWhitespace}*\*|(?:\p{javaWhitespace}*\.\p{javaWhitespace}*\p{javaJavaIdentifierStart}[\p{javaJavaIdentifierPart}\p{javaIdentifierIgnorable}]*)+(?:\p{javaWhitespace}*\.\p{javaWhitespace}*\*)?))\p{javaWhitespace}*;

Es werden häufig Java-Kategorien verwendet, z. \p{javaWhitespace} ruft Character.isWhitesspace auf:

  

Kategorien, die sich wie der java.lang.Character Boolean verhalten ismethodname -Methoden (außer den veralteten) sind über dieselbe \p{prop} -Syntax verfügbar, wobei die angegebene Eigenschaft den Namen javamethodname hat.

Immer noch nicht lesbar? So geahnt. Deshalb habe ich versucht, es mit Java-Code ( REGEX ) auszudrücken:

%Vor%

Ich verwende eine Gruppe für den package.Class -Teil und ersetze dann jedes Rauschen aus den Übereinstimmungen.

Die Testeingabe ist die folgende Zeichenfolge ( IMPORTS ):

%Vor%

Die Ausgabe:

%Vor%     
xehpuk 22.03.2016, 16:49
quelle
9

Das passt (fast) zu Ihren Bedürfnissen:

%Vor%

Debuggex-Demo

Fast, weil die Übereinstimmungen die neuen Zeilen enthalten (z. B. in Ihrer org.package.Test-Deklaration). Dies sollte danach behandelt werden:

%Vor%

In Java \s entspricht [ \t\n\x0B\f\r] . Werfen Sie einen Blick auf Possessivquantifizierer , um den ?+ Quantifizierer zu verstehen.

    
sp00m 22.03.2016 12:46
quelle
3

Sie können diese Regex verwenden:

%Vor%

Escaped für Java:

%Vor%

Hier ist ein Regextester link

    
brso05 22.03.2016 12:50
quelle
1

Vielleicht suchen Sie das?

%Vor%

Quelle

    
Oliver Junk 22.03.2016 12:53
quelle
0

Versuchen Sie diese Regexp:

import (static )*([^;])*

    
Alexey 22.03.2016 12:43
quelle

Tags und Links