Reguläre Ausdrücke

Goldfish

Bekanntes Mitglied
Okay, ich hab hier vor kurzem einen Thread gefunen gehabt, in dem reguläre Ausdrücke vorgeschlagen wurde, von denen ich bislang nicht viel ahnung hatte, weshalb ich mich gleich mal versucht hatte , schlau zu machen. Ich hab schon ganz gut davon profitiert, hänge jedoch noch an einigen Stellen fest.

1. Mir fällt keine Möglichkeit ein, so etwas aus einem String mit einem regulären Ausdruck herauszufiltern

blablabla (x == 29 && (y == 30 || y == 2) ) bla bla bla

Gibt es eine Möglichkeit die gesamte äußere Klammer mit einem regulären Ausdruck zu filtern?


2. Egal wieviel ich damit rumprobiere und wie oft ich die Beschreibung lese, ich schnall einfach nicht, wie greedy, reluctant und possessive Ausdrücke arbeiten... wäre super, wenn mir das vielleicht jemand in anderen Worten erklären könnte als hier
Quantifiers (The Java™ Tutorials > Essential Classes > Regular Expressions)

Edit: Kleine Änderung. Die Greedy sind mir bewusst und mit denen arbeite ich auch hauptsächlich, aber die anderen beiden begreif ich nicht

Danke im Voraus schonmal
 

Antoras

Top Contributor
Diese Begriffe beschreiben die Implementierungsdetails, also wie der Regex-Parser intern arbeitet. Für deren genaue Funktionsweise siehe hier: regex - Greedy vs. Reluctant vs. Possessive Quantifiers - Stack Overflow

Das Problem an den Begrifflichkeiten ist, dass sie mehr oder weniger damit zu tun haben wie Regex intern geparst werden, was dem Anwender aber eigentlich egal sein sollte. Die meisten Regex-Parser sind - gelinde gesagt - äußert fragwürdig implementiert sind (sie setzen massiv Backtracking ein) und haben somit in bestimmten Fällen leider eine exponentielle Laufzeit. Kann man das anhand vom Regex erkennen und beheben spart man sich viel Zeit bei der Ausführung (z.T ist das sogar so schlimm, dass der Parser nicht mehr terminiert, weil die Abarbeitung einfach zu lange dauert).

Es gibt Algorithmen, die diese Laufzeitprobleme nicht haben und bei denen eine Unterscheidung nach den gefragten Begriffen nicht nötig ist, da sie immer optimal arbeiten (sogenannte DFA) und man jederzeit die Resultate auf die eigenen Bedürfnisse anpassen kann. Nur leider ist dieses Wissen noch nicht bei denen angekommen, die die Regex-Parser geschrieben haben, weshalb wir mit diesen "dummen" Implementierungen leben müssen.
 
Zuletzt bearbeitet:

Mujahiddin

Top Contributor
Mal zu deinem Beispiel:
Grundsätzlich wüsste ich nicht, wie das mit Regex möglich sein sollte. Du kannst mit Regex Muster im Text erkennen und diese dann auf einen Text anwenden. Was du vorhast, ist eher eine Art parsen. Ich sage dir, warum das mit Regex wahrscheinlich nicht machbar ist:

Mit äußerer Klammer willst du den gesamten Bereich finden, der davon eingeschlossen ist. Das geht nicht ohne Weiteres, denn wenn eine neue offene Klammer kommt, muss erst diese geschlossen werden usw. Es gibt dafür eine Methode: Du iterierst über den String und merkst dir eine Zahl, die bei 0 anfängt - wenn dein Iterator auf eine offene Klammer stößt, wird diese Zahl um 1 erhöht - bei einer geschlossenen Klammer um 1 verkleinert. Sobald diese Zahl den Wert 0 annimmt (und 1 Klammerpaar gefunden wurde), wird dieser Bereich gespeichert. Das ähnelt eher einem Parser, mit Regex ist das leider nicht zu machen.

Jetzt stellen sich aber noch Fragen wie, was wird gemacht, wenn es sich um
Code:
blabla ( if (x == y && "(hallo" == "(welt"  ) ) blabla
handelt? Werden diese Klammern ignoriert? Wenn ja, wie? etc. etc. etc.

Wie du siehst, ist das schon ein etwas heikleres Thema. Vergiss am besten Regex für dein Vorhaben.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Namen von Methoden über Reguläre Ausdrücke bearbeiten Allgemeine Java-Themen 6
E Reguläre Ausdrücke: String-Ersetzung Allgemeine Java-Themen 0
G Reguläre Ausdrücke Allgemeine Java-Themen 11
S Reguläre Ausdrücke: Polynomterme Allgemeine Java-Themen 14
jstei001 Reguläre Ausdrücke bearbeiten/ändern Allgemeine Java-Themen 14
C reguläre Ausdrücke finden nicht was sie finden sollen Allgemeine Java-Themen 8
F Reguläre Ausdrücke und BBCode Allgemeine Java-Themen 10
J String für reguläre Ausdrücke escapen Allgemeine Java-Themen 2
C Reguläre Ausdrücke - X{0}?.* Allgemeine Java-Themen 8
C Reguläre Ausdrücke, String rückwärts durchsuchen Allgemeine Java-Themen 6
I Reguläre Ausdrücke und das "~" Symbol Allgemeine Java-Themen 2
B Reguläre ausdrücke mit variablen? Allgemeine Java-Themen 12
H Regex - Reguläre Ausdrücke Allgemeine Java-Themen 3
A Reguläre Ausdrücke vereinfachen Allgemeine Java-Themen 19
J Reguläre Ausdrücke Allgemeine Java-Themen 14
A Zufallswerte für reguläre Ausdrücke Allgemeine Java-Themen 15
G Reguläre Ausdrücke Allgemeine Java-Themen 8
R reguläre Ausdrücke Allgemeine Java-Themen 2
L Reguläre Ausdrücke und Fehlerbehandlung Allgemeine Java-Themen 10
RaoulDuke Reguläre Ausdrücke - Daten extrahieren Allgemeine Java-Themen 3
L reguläre Ausdrücke? Allgemeine Java-Themen 2
R Reguläre Ausdrücke (mehrzeilig) Allgemeine Java-Themen 2
C Reguläre Ausrücke Punkte im Satz richtig erkennen Allgemeine Java-Themen 6
E Reguläre Txt in Tree parsen Allgemeine Java-Themen 2
J Reguläre Ausrücke - Klammer nicht vorhanden Allgemeine Java-Themen 2
B kontextfreie grammatik / reguläre grammatik Allgemeine Java-Themen 2
P reguläre ausrücke und String.matches Allgemeine Java-Themen 4
S Reguläre Ausdruecke! Allgemeine Java-Themen 5
A Lambda-Ausdrücke Allgemeine Java-Themen 5
M Lambada Ausdrücke - wie funktionieren und benutzt man sie? Allgemeine Java-Themen 5
S Lambda Ausdrücke: @FunctionalInterface Instanzen auf null prüfen Allgemeine Java-Themen 9
Z Design um boolsche ausdrücke zu speichern & auszuwerten Allgemeine Java-Themen 3
R Logische Ausdrücke in Java Allgemeine Java-Themen 4
Loyd Noch ne Regex-Frage: Verschachtelte Ausdrücke Allgemeine Java-Themen 4
H Geklammerte Ausdrücke nach Divide&Conquer Allgemeine Java-Themen 2
B Parser für logische Ausdrücke Allgemeine Java-Themen 9
J Expression Language für mathematische Ausdrücke Allgemeine Java-Themen 8
B Regeuläre Ausdrücke Allgemeine Java-Themen 8
G arithmetische ausdrücke Allgemeine Java-Themen 5
M Regular Expression - verschiedene Ausdrücke testen (grep | ) Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben