Hallo,
also
»» /^([ab]c?)+$/Das könnte man übertragen etwa so formulieren oder?:
((ab)c*)+
nein, wenn dann schon
^((ab)c?)+$
? match o oder 1 Zeichen (perldoc perlre). Sollte das nicht immer sein, dann
/^([ab]c{0,1})+$/
Das ist meiner meinung nach schon verdammt knapp dran, aber auch du denkst dabei zu sehr an Perl!
verdammt knapp? auch ohne Perl ein glatter Treffer ;-)
Wenn man aus einem Text diese Sprache isolieren will, dann stimmts!
Nur Elemente der Sprache sind erlaubt! Alles andere wird gnadenlos beanstandet.
Aber wenn ich streng wäre, dann würde ich sagen, der (vorgegebene) Automat würde diese Sprache nicht erkennen, wegen dem Plus hinten ;-)
Ich bin streng, also nur a,b oder c, kein wort ist nicht gültig, c muß nach a oder b kommen. Eigentlich gibt es nur 'a', 'b', 'ac' oder 'bc' oder beliebige Aneinanderreihungen dieser vier 'Grundelemente'.
Wenn Du allerding auch '' als gültiges Element der Sprache anerkennst, dann heißt die Regex
/^([ab]c?)*$/
Daß ich Die Begrenzer (^ und $) verwendet, habe ich zwar grob schon einmal erklärt, will es hier aber vielleicht wiederholen:
Wenn ich es nicht machen würde, dann würden auch Texte gemacht werden, in denen nur Teile von Deiner Sprache vorkommen würden. auch würde ein führendes 'c' oder doppelte 'c' gültig sein.
Wenn ich das gefunden Wort in $1 haben will, und die Regex
/(([ab]c?)*)/ # das äußere Klammernpaar ist nur für $1 relevant
lauten würde, dann würde in dem text
'aber cab ist da nicht richtig'
Treffer finden (hier mit den Treffern in Klammer)
'(ab)er c(ab) ist d(a) nicht richtig'
obwohl der text nicht teil Deiner Sprache ist.
Auch bei 'cab' == 'c(ab)' oder 'acc' == '(ac)c' würden Treffer gefunden.
Nein, ich bleib dabei
/^([ab]c?)+$/
oder bei '' als gültiger text
/^([ab]c?)*$/
Und das Ganze ist (so denk ich jedenfalls) sed, grep, awk usw. tauglich, ich sehe da keine Perl-spezifischen elemente in der Regex.
Grüße
Klaus
PS.: ich frag mich gerade, was ist richtig 'der regex' oder 'die regex'. Für mich war es intuitiv immer 'die regex'.Vielleicht weil reguläre Ausdrücke eher weibliche Charakterzüge aufweisen ;-)