Regulärer Ausdruck

Status
Nicht offen für weitere Antworten.
J

Jens212

Gast
Hallo Zusammen,

ich habe einen regulären Ausruck gebaut, wer sich nicht so verhält, wie es gerne hätte. :wink:

Vielleicht hat ja einer von Euch 'ne Idee, wie man das Problem lösen kann.
Meine Kollegin hat mit bereits alternative Lösungsmöglichkeiten aufgezeigt (mir String.split() etc.), ABER ich möchte es unbedingt mit einem regulären Ausruck lösen. Ich bin davon überzeugt, dass es geht.

Gegeben sind folgende Zeilen

Code:
[footer xyz='a' abc='z' numbered='false']This is the text[/footer]
[header name='hello']lalala[/header]
[sonstwas test='blub']tralitrala[/sonstwas]
[taggi]sabber[/taggi]

Ich möchte diese Zeilen nun einlesen und sowohl den Tagnamen, als auch die Parameter auslesen.
Im ersten Beispiel also

Code:
Footer
xyz='a'
abc='z'
numbered='false'

Hier ist der (un)passende reguläre Ausdruck:

Code:
\[([a-z]+)(\s[a-z]+='[a-z0-9]+')*\]

Code:
\[
([a-z]+)  ->  Tagname
(\s[a-z]+='[a-z0-9]+')*  ->  Name='Wert'
\]

Ich bekomme damit immer die gleiche Ausgabe:

Tagname + letztes Name='Wert'-Pärchen.

Sort denn das * hinter (\s[a-z]+='[a-z0-9]+')* nicht dafür, dass name='wert' mehrfach vorkommen kann??

Grüße,
Jens
 
J

Jens212

Gast
Vielleicht sollte ich noch erwähnen, dass der Matcher überall matched.
Das Problem tritt auf, wenn ich an die Gruppen möchte.
 

foobar

Top Contributor
Du kannst doch nicht dynamisch Capturegroups anlegen. Ich würde das mit 2 Regexes machen. Der erste holt den Tag und der zweite holt aus dem Tag die Attribute. Denn woher willst du denn wissen wieviele Attribute enthalten sind?
 

André Uhres

Top Contributor
Du bekommst nur das letzte Paar weil nur dieses mit ] aufhört.
Für solche Fälle gibt's das "lookahead/lookbehind", etwa so:
((?<=\[)[a-z]+)?(\b[a-z]+='[a-z0-9]+'(?=.*\].*\[/.*\]))?
Code:
       String str = "[footer xyz='a' abc='z' numbered='false']This is the text[/footer] ";
        Pattern regex = Pattern.compile("((?<=\\[)[a-z]+)?(\\b[a-z]+='[a-z0-9]+'(?=.*\\].*\\[/.*\\]))?");
        Matcher matcher = regex.matcher(str);
        String item = "";
        while (matcher.find()) {
            item = matcher.group();
            if(item.equals(""))
                continue;//ignore empty items
            else if(!item.contains("="))
                System.out.println("Tag: "+item);
            else
                System.out.println("Wert: "+item);
        }
Weil ich mit dem ? (* geht auch) hinter den Gruppen sage, dass sie nicht da sein müssen, bekomm ich für
die nicht zutreffenden Zeichen ein leeres item, was ich einfach ignoriere.
Ich weiss allerdings nicht, warum Java dann alles in eine Gruppe schmeisst (ist wohl noch ein Javabug).
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
O regulärer Ausdruck zum durchsuchen eines Strings verwenden Allgemeine Java-Themen 2
N Regulärer Ausdruck funktioniert nicht Allgemeine Java-Themen 6
W Regulärer Ausdruck für 0 oder mehr Blanks Allgemeine Java-Themen 8
M Regulärer Ausdruck Allgemeine Java-Themen 3
R Regulärer Ausdruck Allgemeine Java-Themen 5
G Regulärer Ausdruck für 2 Wörter Allgemeine Java-Themen 3
P JFormattedTextField für durch Semikolon getrennte Integer-Werte gesucht / Regulärer Ausdruck Allgemeine Java-Themen 3
H Problem mit der Klasse Pattern - Regulärer Ausdruck Allgemeine Java-Themen 2
S Regulärer Ausdruck tut überhaupt nichts Allgemeine Java-Themen 2
M Regulärer Ausdruck Allgemeine Java-Themen 6
Iron Monkey Regulärer Ausdruck Allgemeine Java-Themen 2
T Regulärer Ausdruck Allgemeine Java-Themen 6
S Regulärer Ausdruck für HTML-Tag Allgemeine Java-Themen 18
P [Regulärer Ausdruck] Auf Gruppe mit Quantifier separat zugreifen? Allgemeine Java-Themen 2
J Regulärer Ausdruck - Der Punkt und der Zeilenumbruch Allgemeine Java-Themen 6
Iron Monkey Regulärer Ausdruck Allgemeine Java-Themen 6
A Regulärer Ausdruck für die Uhrzeit Allgemeine Java-Themen 3
G Regulärer Ausdruck Allgemeine Java-Themen 4
M Regulärer Ausdruck Allgemeine Java-Themen 3
P Regulärer Ausdruck um sich wiederholende Zeichen zu finden. Allgemeine Java-Themen 9
M Regulärer Ausdruck mit [ und ] Allgemeine Java-Themen 9
P Problem - Regulärer Ausdruck funktioniert nicht Allgemeine Java-Themen 5
N Regulärer Ausdruck Allgemeine Java-Themen 2
M Regulärer Ausdruck Allgemeine Java-Themen 2
B regulärer ausdruck Allgemeine Java-Themen 9
T Einfacher regulärer Ausdruck Allgemeine Java-Themen 2
A Regulärer Ausdruck EMail-Prüfung Allgemeine Java-Themen 3
N Regulärer Ausdruck Allgemeine Java-Themen 2
N Regulären Ausdruck in normalen Java-Code umwandeln Allgemeine Java-Themen 12
G JavaFX var Ausdruck Allgemeine Java-Themen 1
S Hex Ausdruck kürzen Allgemeine Java-Themen 34
LimDul Hä? Lambda-Ausdruck geht, Methoden-Referenz nicht Allgemeine Java-Themen 8
L Erste Schritte Ausdruck schöner schreiben? Allgemeine Java-Themen 8
J Frage zu regulärem Ausdruck Allgemeine Java-Themen 2
H Reg Exp Ausdruck erweitern Allgemeine Java-Themen 2
A Bestimmte Sonderzeichen im Regulären Ausdruck Allgemeine Java-Themen 2
B Problem mit Regulärem Ausdruck Allgemeine Java-Themen 4
J RegEx Ausdruck Allgemeine Java-Themen 2
G RegEx- Ausdruck Allgemeine Java-Themen 4
L String Replace mit Regulärem Ausdruck Allgemeine Java-Themen 2
O Text mit Wildcard gegen regulären Ausdruck prüfen Allgemeine Java-Themen 3
T Ausdruck mit pdfBox macht Probleme Allgemeine Java-Themen 2
M Ausgabe in Datei zum Ausdruck Allgemeine Java-Themen 2
F Problem mit regulären Ausdruck in Zusammenhang mit HTML Allgemeine Java-Themen 8
X String zerlegen mittels regulärem Ausdruck Allgemeine Java-Themen 31
M Wertepaar in relulärem Ausdruck Allgemeine Java-Themen 15
A Regulären Ausdruck für Funktionsnamen Allgemeine Java-Themen 4
M Regulären Ausdruck negieren Allgemeine Java-Themen 6
G Frage zu Regulärem Ausdruck Allgemeine Java-Themen 2
S regex-Pattern Ausdruck negieren Allgemeine Java-Themen 2
L Passwort mit Regulärem Ausdruck prüfen Allgemeine Java-Themen 6
I Composite Pattern für Ausgabe von Ausdruck Allgemeine Java-Themen 3
X problem mit regulären ausdruck Allgemeine Java-Themen 3
F Problem mit regulärem Ausdruck Allgemeine Java-Themen 6
M backreference im regulären ausdruck Allgemeine Java-Themen 9
A Probleme Umwandlung Ausdruck String in double Allgemeine Java-Themen 4
P Dateinamen mit regulärem Ausdruck testen Allgemeine Java-Themen 9

Ähnliche Java Themen


Oben