RegEx für gerade Zahlen < Formale Sprachen < Theoretische Inform. < Hochschule < Informatik < Vorhilfe
|
Aufgabe | Gesucht ist ein regulärer Ausdruck, der alle geraden natürlichen Zahlen in Dezimaldarstellung akzeptiert. Geben Sie weiter einen regulären Ausdruck an, der eine gerade Anzahl von Zeichenketten akzeptiert, die nur aus den Buchstaben x,y,z besteht. |
Hallo ihr Lieben!
sitze grade mal wieder an einer Aufgabe vom Informatikblatt und komme einfach nicht wirklich weiter. Also ich habe schon ein paar Ansätze.. erstmal bin möchte ich mir einen RegEx erstellen, welcher nur gerade Zahlen akzeptiert, da habe ich mir folgendes überlegt:
([1-9][0-9]*(0|2|4|6|8)|(0|2|4|6|8))
Der sollte auch soweit klappen (habs per RegEx online Tester ausprobiert, der Teil vor dem ODER operator erfasst alle gerade Zahlen die größer-gleich 10 sind und der danach akzeptiert alle geraden Zahlen die kleiner 10 sind (also nur 0,2,4,6,8)..
Nun will ich mir einen RegEx bauen, der alle Zeichenketten akzeptiert, welche nur aus x,y,z bestehen und eine gerade Anzahl von eben diesen Zeichen haben. Dafür benutze ich die Wiederholungsoperatoren {}, also folgendes:
(x|y|z){([1-9][0-9]*(0|2|4|6|8)|(0|2|4|6|8))}
Die Klammer gibt jeweils x,y,z zurück und das genau so oft, wie in den geschweiften Klammern angegeben ist (also eine gerade Anzahl!). Leider klappt dieser Ausdruck nicht, bekomme immer nur einen Fehler zurück wenn ich den Ausdruck ausprobiere.
Was mache ich nur falsch? Ich hoffe ihr könnt mir helfen.
Liebe Grüße
Steffi
|
|
|
|
Hallo Steffi1988!
> Gesucht ist ein regulärer Ausdruck, der alle geraden
> natürlichen Zahlen in Dezimaldarstellung akzeptiert. Geben
> Sie weiter einen regulären Ausdruck an, der eine gerade
> Anzahl von Zeichenketten akzeptiert, die nur aus den
> Buchstaben x,y,z besteht.
> Hallo ihr Lieben!
>
> sitze grade mal wieder an einer Aufgabe vom Informatikblatt
> und komme einfach nicht wirklich weiter. Also ich habe
> schon ein paar Ansätze.. erstmal bin möchte ich mir einen
> RegEx erstellen, welcher nur gerade Zahlen akzeptiert, da
> habe ich mir folgendes überlegt:
>
> ([1-9][0-9]*(0|2|4|6|8)|(0|2|4|6|8))
>
> Der sollte auch soweit klappen (habs per RegEx online
> Tester ausprobiert, der Teil vor dem ODER operator erfasst
> alle gerade Zahlen die größer-gleich 10 sind und der danach
> akzeptiert alle geraden Zahlen die kleiner 10 sind (also
> nur 0,2,4,6,8)..
> Nun will ich mir einen RegEx bauen, der alle Zeichenketten
> akzeptiert, welche nur aus x,y,z bestehen und eine gerade
> Anzahl von eben diesen Zeichen haben. Dafür benutze ich die
> Wiederholungsoperatoren {}, also folgendes:
>
> (x|y|z){([1-9][0-9]*(0|2|4|6|8)|(0|2|4|6|8))}
>
> Die Klammer gibt jeweils x,y,z zurück und das genau so oft,
> wie in den geschweiften Klammern angegeben ist (also eine
> gerade Anzahl!). Leider klappt dieser Ausdruck nicht,
> bekomme immer nur einen Fehler zurück wenn ich den Ausdruck
> ausprobiere.
Solch ein Wiederholungsoperator ist mir neu, ich würde das folgendermaßen machen:
[mm] (xx|xy|xz|yx|yy|yz|zx|zy|zz)^{\star}
[/mm]
Bin mir auf die Schnelle nicht 100pro sicher, ob das alle Möglichkeiten abdeckt, aber notfalls kann man sich für die übrigen ja noch was überlegen.
Viele Grüße
Bastiane
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 17:38 Mo 03.11.2008 | Autor: | Steffi1988 |
Hi,
danke für deine Anwort, so würde es klappen mit allen Permutationen.
habe es jetzt allerdings auch so hinbekommen
((x|y|z)(x|y|z))*
sollte beides klappen :)
danke nochmal!
|
|
|
|