Mit Regex bis zum nächsten Auftreten eines Zeichens suchen

Mr. Brooks

Lt. Commander
Dabei seit
Aug. 2011
Beiträge
1.441
Hallo,

ich muss einen Text nach allen Auftreten von Klammern und Text jedweder Art zwischen den Klammern suchen (auch Sonderzeichen). Wenn ich z. B. nach

suchen lasse, findet er zwar die Klammern, aber nicht bis zum Ende der aktuellen Klammer sondern bis zur allerletzten Klammer im gesamten Text. In

text text text (text1inklammer) text text text (text2inklammer) text text

würde er also alles bis zur 2.Klammer finden, nicht bis zur ersten, da ja der Punkt "alles" ist, inkl. Klammer. So etwas wie "suche alles, außer" scheint es nicht zu geben. Zum Beispiel geht


nicht, also nach allem suchen außer ')'.
 
Ich würde es so machen: \(.*[^)]\) Spätestens bei verschachtelten Klammern wirst du mit regexp scheitern.
 
Nicht ganz, da findet er ja mit .* immer noch vorher alles :D

Aber sowas wie
Perl:
/\([^\)]*\)/
ist durchaus ein praktikabler Ansatz.

Übrigens, verschachtelt geht auch, ist aber aufwendiger. Dann muß man noch anfangen mit "offene Klammern zählen". Das würde ich aber nicht pauschal empfehlen wollen - dazu muß man schon eine Idee von Regex haben, ansonsten kopiert man sich das irgendwo hin und jede Wartung wäre ab diesem Moment faktisch unmöglich.
 
Für den im Beispiel genannten Anwendungsfall hätte ich den nicht gierigen Ansatz als sinnvoller empfunden. Also das:

Code:
\(.+?\)

Fände ich persönlich weitaus intuitiver, als die andere Variante und ist ja eigentlich auch genau für solche Szenarien gedacht.
 
  • Gefällt mir
Reaktionen: RalphS
Viele Wege führen nach Rom :daumen:
Aber wie Du siehst fehlt bereits ein grundsätzliches Verständnis für Regex. Ob man da mit greedy oder mit non greedy den besseren Ansatz hat, keine Ahnung, ich persönlich denk aber, daß man nongreedy noch nen ticken besser begreifen muß. Auch wenn sicherlich weder das eine noch das andere in ein paar Tagen noch klar sein wird.

Ymmv.
 
Zurück
Top