regulärer Ausdruck

Neue Frage »

Auf diesen Beitrag antworten »
Haevelin regulärer Ausdruck

Der folgende Ausdruck soll durch einen regulären Ausdruck beschrieben werden: eine Folge von 1 und 2, wobei der Gesamtausdruck eine gerade Anzahl von Elementen haben soll zwischen 0 und 8.

Ich habe folgende Lösung: (1|2){0,2,4,6,8}


Ist das richtig?
 
Auf diesen Beitrag antworten »
Haevelin RE: regulärer Ausdruck

Jetzt habe ich eine Verbesserung:

(11|12|21|22){0,4}


Ist das richtig?
Auf diesen Beitrag antworten »
Karlito

Dazu ist die Frage,wie bei euch reguläre Ausdrücke definiert sind. In der Definition, die ich aus den Vorlesungen kenne, gibt es keine Minima und Maxima.

Mit grep getestet ist deine erste Veriante falsch und deine zweite Variante richtig.

Hier noch 2 etwas kürzere Varianten:
- ((1|2)(1|2)){0,4}
- ((1|2){2}){0,4}

Gruß,

Karlito
Auf diesen Beitrag antworten »
as_string

Warum nicht einfach eine Character Class mit 1 und 2 definieren, etwa so:
code:
1:
^([12]{2}){0,4}$

Und man braucht wahrscheinlich schon die Zeilenanfangs und -end Marker, oder?

Gruß
Marco
 
Auf diesen Beitrag antworten »
Karlito

@as_string: Gute Idee mit den Charactern. Die Anfangs- und Endmarker sind aber nicht erforderlich, da nicht gefordert ist, dass es sich um Zeilen mit ausschließlich diesem Inhalt handelt. Das Pattern darf also auch irgendwo stehen.

Gruß,

Karlito
Auf diesen Beitrag antworten »
as_string

Hallo Karlito!

Naja, im Nachhinein hatte ich gesehen, dass die Character-Class auch nicht wirklich kürzer ist, als die (1|2) Schreibweise... Zunge raus

Mit den Ankern: Die Frage ist, für was man es genau braucht: Wenn Du keine Anker hast, dann "trifft" das Muster ja prinzipiell immer, wenn auch der Treffer als solches leer ist (wegen der 0 im Quantifier). Ich hatte nämlich erst probiert ohne Anker und nur gefragt: Trifft das Muster an sich oder nicht. Da hatte ich dann immer einen Treffer, egal was ich als Eingabe hatte.
Und das mit dem "geradzahlig" ist dann auch so ein Punkt. Wenn Du nämlich "121" hättest, würde das Muster ja sonst auch Treffen, halt nur auf die ersten beiden Ziffern, aber es wäre ein Treffer.

Wenn man den Treffer als solchen weiter verwenden will und es ist egal, ob noch mehr außenrum steht, dann mag das sicherlich auch eine sinnvolle Verwendung mit dem Muster ohne Anker geben, da hast Du natürlich völlig Recht!
Hängt also, wie gesagt vom Einsatzzweck ab.

Gruß
Marco
Auf diesen Beitrag antworten »
Karlito

Hi Marco,

Zitat:
Original von as_string
Naja, im Nachhinein hatte ich gesehen, dass die Character-Class auch nicht wirklich kürzer ist, als die (1|2) Schreibweise... Zunge raus


Wieso? Ist doch gut, man spart immerhin ein Zeichen Augenzwinkern Und es ist eleganter, finde ich.

Zitat:
Original von as_string
Mit den Ankern: Die Frage ist, für was man es genau braucht: Wenn Du keine Anker hast, dann "trifft" das Muster ja prinzipiell immer, wenn auch der Treffer als solches leer ist (wegen der 0 im Quantifier). Ich hatte nämlich erst probiert ohne Anker und nur gefragt: Trifft das Muster an sich oder nicht. Da hatte ich dann immer einen Treffer, egal was ich als Eingabe hatte.


Gutes Argument, daran habe ich nicht gedacht,

Zitat:
Original von as_string
Und das mit dem "geradzahlig" ist dann auch so ein Punkt. Wenn Du nämlich "121" hättest, würde das Muster ja sonst auch Treffen, halt nur auf die ersten beiden Ziffern, aber es wäre ein Treffer.


Müsste es nicht zweimal treffen? Einmal für die ersten beiden Ziffern und einmal für die letzten beiden Ziffern?

Zitat:
Original von as_string
Wenn man den Treffer als solchen weiter verwenden will und es ist egal, ob noch mehr außenrum steht, dann mag das sicherlich auch eine sinnvolle Verwendung mit dem Muster ohne Anker geben, da hast Du natürlich völlig Recht!
Hängt also, wie gesagt vom Einsatzzweck ab.


Ich vermute das Beispiel ist rein akademisch...

Danke auf jeden Fall für die Ergänzung und Verbesserung!

Gruß,

Karlito
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »