RegExpression gesucht
Richi
- php
Hallo Forum,
ich bräuchte mal Hilfe bei einem regulären Ausdruck, bzw. weiß ich gar nicht, ob man das in einem Ausdruck hin bekommt oder eine zusätzliche if-Schleife benötigt. Ich beschreibe mal, was ich suche:
Erlaubt sein sollen Ausdrücke, die entweder mit X oder mit XY oder XYZ beginnen.
Danach soll zwingend ein Bindestrich erfolgen (-),
danach soll zwingend bei XY und XYZ
eine zweiziffrige Zahl,
dann ein Bindestrich (-),
dann wieder eine 2-ziffrige Zahl,
wieder ein Bindestrich (-) und danach eine 4-ziffrige Zahl erfolgen.
War der Anfangsbuchstabe ein X,
dann darf hinter dem Buchstaben ein Bindestrich,
dann eine 2-ziffrige Zahl und
danach wieder ein Bindestrich (-)
und danach eine 4-ziffrige Zahl erfolgen.
Beispiele:
X-44-0996 (erlaubt)
XY-44-0996 (nicht erlaubt)
XY-44-77-0996 (erlaubt)
X-44-77-0996 (nicht erlaubt)
Wer weiß Rat?
Schönen Tag, Richard
@@Richi:
nuqneH
Erlaubt sein sollen Ausdrücke, die entweder mit X oder mit XY oder XYZ beginnen.
Danach soll zwingend ein Bindestrich erfolgen (-),
danach soll zwingend bei XY und XYZ
eine zweiziffrige Zahl,
dann ein Bindestrich (-),
dann wieder eine 2-ziffrige Zahl,
wieder ein Bindestrich (-) und danach eine 4-ziffrige Zahl erfolgen.War der Anfangsbuchstabe ein X,
dann darf hinter dem Buchstaben ein Bindestrich,
dann eine 2-ziffrige Zahl und
danach wieder ein Bindestrich (-)
und danach eine 4-ziffrige Zahl erfolgen.
Der Teil YZ?-\d{2} kann also auftreten oder nicht: X(?:YZ?-\d{2})?-\d{2}-\d{4}
Du könntest auch die zwei Fälle mit „Oder“ verknüpft notieren: XYZ?-\d{2}-\d{2}-\d{4}|X-\d{2}-\d{4}
Ich würde die erste Variante vorziehen.
Qapla'
Guten Morgen Gunnar,
Der Teil YZ?-\d{2} kann also auftreten oder nicht: X(?:YZ?-\d{2})?-\d{2}-\d{4}
Nein, YZ geht gar nicht. Nur XYZ oder XY oder X. Und dann -\d{2} usw.
Du könntest auch die zwei Fälle mit „Oder“ verknüpft notieren: XYZ?-\d{2}-\d{2}-\d{4}|X-\d{2}-\d{4}
Diese Variante verstehe ich bis auf das Fragezeichen.
Ich würde die erste Variante vorziehen.
Die wiederum verstehe ich gar nicht.
Qapla'
Grüße, Richard
@@Richi:
nuqneH
Der Teil YZ?-\d{2} kann also auftreten oder nicht: X(?:YZ?-\d{2})?-\d{2}-\d{4}
Nein, YZ geht gar nicht.
Von „nur“ war auch nicht die Rede, sondern von „Teil“.
Am Anfang steht immer X, am Ende immer -\d{2}-\d{4}. Dazwischen kann YZ?-\d{2} stehen oder auch nicht.
Und wo wir bei Anfang und Ende sind; das hatte ich glatt vergessen. Der Anfang muss noch mit '^' markiert werden, das Ende mit '$' (sonst könnten ja noch Zeichen davor und danach stehen). Also: ^X(?:YZ?-\d{2})?-\d{2}-\d{4}$
Diese Variante verstehe ich bis auf das Fragezeichen.
Oh-oh. Eigne dir bitte die Grundlagen an, bspw. auf der http://de.selfhtml.org/perl/sprache/regexpr.htm@title=SELFHTML-Seite nach „Fragezeichen“ suchen.
Die [erste Variante] wiederum verstehe ich gar nicht.
Dann sollte auch die verständlich sein. Das Fragezeichen in '(?:' bedeutet einfach nur eine öffnende Klammer ohne Merken (was bei '(' ohne '?:' dahinter der Fall wäre).
Qapla'
Hi Gunnar,
vielen Dank für die Hilfe und den weiterführenden Link.
Und schönen Tag, Richard