Also hier die Aufgabe:
Stellt euch vor ihr habt eine Sprache die sich aus nur drei Buchstaben zusammensetzt! Es geht also um eine Sprache aus dem Alphabet {a,b,c}*, WOBEI vor jedem 'c' zumindest ein 'a' oder 'b' stehen MUSS. Ansonsten Syntaxfehler ;-) Anders gesagt: Es kann kein c vorkommen, vor dem nicht entweder mindestens ein a oder b steht!
a,b oder c können dabei * ( >=0 ) mal vorkommen. Die Worte, die man mit dieser Sprache bilden kann, sollen durch einen regulären Ausdruck beschrieben werden.
Das würde bedeuten, dass auch "" ein gültiger Name wäre. Ich gehe mal davon aus, dass du das nicht möchtest, mein Ausdruck erfordert daher ein Zeichen. Wenn du das nicht möchtest, änder das '+' in ein '*'.
Mögliche Worte(Zeichenketten) sind z.b: aaa, abcabcc, ac, bcbbbb, ba, ... Keine Worte aus dieser Sprache wären: cabac, c, abccb
wenn 'abccb' ein gültiger Name ist, kann 'abcabcc' keiner sein, dort steht nämlich kein 'a' oder 'b' vor dem letzten 'c'.
Ihr seht, eine haarige Sache also, und gar nicht _soooo_ leicht.
Finde ich nicht:
/^ # string beginnt mit
( # ein Konstrukt aus
[ab]c # c mit vorhergehenden 'a' oder 'b'
# oder
[ab] # 'a' oder 'b'
)+ # das ganze mind. 1 Mal
$/x # string endet
while (<DATA>) {
chomp;
if (/^([ab]c[ab])+$/) {
printf("%20s ist ok\n", $_);
} else {
printf("%20s ist ein FEHLER\n", $_);
}
}
__DATA__
aaa
abcabcc
ac
bcbbbb
ba
cabac
c
abccb
gibt aus:
aaa ist ok
abcabcc ist ein FEHLER
ac ist ok
bcbbbb ist ok
ba ist ok
cabac ist ein FEHLER
c ist ein FEHLER
abccb ist ein FEHLER
Ich empfehle:
Reguläre Ausdrücke -- Jeffrey E. F. Friedl -- ISBN: 3930673622
http://www.amazon.de/exec/obidos/ASIN/3930673622/081181081181
Ich lese dann mal die anderen Antworten...