Gunnar Bittersmann: RegEx: Jedes Zeichen nur einmal

Beitrag lesen

@@Hannes:

nuqneH

ich habe ein Problem, was ich gerne mit einem Regulären Ausdruck lösen möchte

Warum? Um dann 2 Probleme zu haben?

dieser soll aus Zahlenfolgen (012,022,212,111,001,101,000,201) diese herausfinden, bei denen jede Zahl genau einmal vorkommt (im Beispiel die 012 und 201) oder alle Zahlen gleich sind (111 + 000).

Du meinst Ziffern, nicht Zahlen.

Das Zweite habe ich über diesen Ausdruck erfolgreich gelöst:
(0{3})|(1{3})|(2{3})
Geht das noch einfacher?

000|111|222

Zu prüfen, ob alle Zeichen gleich sind, geht mit einem regulären Ausdruck nicht, außer per Aufzählung aller Möglichkeiten. Dazu bedarf es erweiteter Suchmuster mit Rückwärtsreferenzen (back references).

Besser ist man aber ohne dran: Zeichenkette in Array von Zeichen zerlegen (falls sie das in der jeweiligen Programmiersprache nicht schon ist), dann Arrayelemente auf Gleichheit prüfen. (Es genügt, das erste mit allen anderen zu vergleichen. Bei der ersten Ungleichheit kann abgebrochen werden.)

Beim Ersten ("jede Zahl nur einmal") finde ich leider keine Lösung. Gibt es hier überhaupt eine?

Auch hier: Aufzählung aller erlaubten Zeichenketten (wenn das praktikabel ist). Im Allgemeinen dürfte das auch mit erweiterten Suchmustern schwer werden.

Besser ist man auch hier ohne dran: Zeichenkette in Array von Zeichen zerlegen (falls sie das in der jeweiligen Programmiersprache nicht schon ist), dann das Array sortieren, dann Arrayelemente auf Ungleichheit prüfen: das erste mit dem zweiten, das zweite mit dem dritten usw. (Bei der ersten Gleichheit kann abgebrochen werden.)

Qapla'

--
Alle Menschen sind klug. Die einen vorher, die anderen nachher. (John Steinbeck)