Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
-- Theoretische Informatik (http://www.informatikerboard.de/board/board.php?boardid=5)
--- regulärer Ausdruck (http://www.informatikerboard.de/board/thread.php?threadid=1908)


Geschrieben von Haevelin am 10.09.2014 um 13:42:

  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?



Geschrieben von Haevelin am 10.09.2014 um 15:56:

  RE: regulärer Ausdruck

Jetzt habe ich eine Verbesserung:

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


Ist das richtig?



Geschrieben von Karlito am 10.09.2014 um 20:01:

 

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



Geschrieben von as_string am 12.09.2014 um 11:50:

 

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



Geschrieben von Karlito am 12.09.2014 um 11:54:

 

@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



Geschrieben von as_string am 12.09.2014 um 14:16:

 

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



Geschrieben von Karlito am 13.09.2014 um 01:43:

 

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


Forensoftware: Burning Board, entwickelt von WoltLab GmbH