Richi: RegExpression gesucht

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

  1. @@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'

    --
    Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
    (Mark Twain)
    1. 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

      1. @@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'

        --
        Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
        (Mark Twain)
        1. Hi Gunnar,

          vielen Dank für die Hilfe und den weiterführenden Link.

          Und schönen Tag, Richard