Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Regulärer Ausdruck: Alles "zwischen" X und Y (https://www.delphipraxis.net/190385-regulaerer-ausdruck-alles-zwischen-x-und-y.html)

Der schöne Günther 29. Sep 2016 11:42

Regulärer Ausdruck: Alles "zwischen" X und Y
 
Es hört sich so einfach an, aber ich stehe auf dem Schlauch folgendes in einen regulären Ausdruck zu bekommen:

Erfasse das, was zwischen dem letzten "X" und "Y" eingerahmt ist.

Beispiel:
Der Ausdruck
Code:
X(.*)Y
liefert mir für
Code:
XHallo WeltY
natürlich "Hallo Welt"

Das scheitert natürlich wenn die Eingabe
Code:
XeinsXzweiYdreiYvierXfünfY
ist. Mein Match ist
Code:
einsXzweiYdreiYvierXfünf
, also alles was zwischen dem "ersten" X und dem "letzten" Y ist.

Ich möchte aber alles zwischen dem letzten X und dem darauffolgenden Y. In diesem Fall also "fünf".

Geht mit regulären Ausdrücken nicht, oder?

Valle 29. Sep 2016 11:51

AW: Regulärer Ausdruck: Alles "zwischen" X und Y
 
Unter PCRE nennt man das Greedy-Flag, schau mal ob es das bei dir gibt.

Edit: Oh sorry, hab deinen Beitrag nicht richtig gelesen. Ich glaube Greedy ist hier doch nicht zutreffend.

Edit 2:// Hilft dir das hier weiter?

SProske 29. Sep 2016 11:54

AW: Regulärer Ausdruck: Alles "zwischen" X und Y
 
Code:
X(?!.*X)(.*)Y
wenn du tatsächlich nur das letzte X haben willst, oder

Code:
X(.*?)Y
und dann durch alle Matches iterieren.

himitsu 29. Sep 2016 15:46

AW: Regulärer Ausdruck: Alles "zwischen" X und Y
 
http://www.regular-expressions.info/repeat.html

Delphi-Quellcode:
X[^XY]*Y
= von X bis Y ohne X und Y dazwischen.
als MatchGroip
Delphi-Quellcode:
X([^XY]*)Y
oder mit Lookaround drumdrum = zwischen X bis Y ohne X und Y drinnen.

oder über GreedyFlag (g und G) beim Aufruf
bzw. mit Greedy-Modifier im RegEx =
Delphi-Quellcode:
X(.*)Y
bzw.
Delphi-Quellcode:
X(.*?)Y

Der schöne Günther 29. Sep 2016 16:59

AW: Regulärer Ausdruck: Alles "zwischen" X und Y
 
Vielen Dank, das hat mir sehr geholfen. Ich war zu sehr verbissen darauf einen Ausdruck für einen Treffer zu haben, ich kann ja mehrere Matches haben und das letzte nehmen.

Auch die Sache mit dem Greedy-Quantifier habe ich jetzt verstanden, danke! :thumb:

Jim Carrey 29. Sep 2016 17:05

AW: Regulärer Ausdruck: Alles "zwischen" X und Y
 
Ich kann zwar nichts zum Thema direkt beisteuern, aber diese Seite hier hat mir schon oft Kopfschmerzen erspart:

http://regex101.com/

Der schöne Günther 29. Sep 2016 17:15

AW: Regulärer Ausdruck: Alles "zwischen" X und Y
 
Mein Favorit ist regexr.com 8-)

SProske 29. Sep 2016 18:56

AW: Regulärer Ausdruck: Alles "zwischen" X und Y
 
regexr ist aber für Javascript-Regex, da fehlt also einiges was PCRE (Viele Unicode-Features, Lookbehind, Possesive Quantifier, Match-Reset, Continous Matching etc.) kann.

Der schöne Günther 29. Sep 2016 20:27

AW: Regulärer Ausdruck: Alles "zwischen" X und Y
 
Danke für den Hinweis. Bislang habe ich noch nichts vermisst, bin aber auch alles andere als ein Profis was Regex angeht :stupid:

Klaus01 30. Sep 2016 07:43

AW: Regulärer Ausdruck: Alles "zwischen" X und Y
 
.. einen hät ich noch
Code:
\S*X(.*)Y$
Grüße
Klaus


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:09 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz