Reguläre Ausdrücke angeben |
15.11.2015, 11:11 | Auf diesen Beitrag antworten » |
Schattenklinge | Reguläre Ausdrücke angeben Hallo, ich bins nochmal, ich sitze gerade an einer Aufgabe und bin mir unsicher, in meinem skript steht kaum was dazu... ich soll in der Aufgabe einen regulären Ausdrück über {a,b,c} angeben: (a) wort w mit wortlänge w % 3 == 0 oder wortlänge w % 2 == 0. und (b) wort w mit w enthält nicht die teilfolge ab Meine Frage dazu ist jetzt: wie gehe ich an solchen aufgaben ran? ich meine ich hätte jetzt bei der a gesagt: (a+b+c)^*, aber das schließt ja nicht alles ein. Ich habe mir auch überlegt, wenn durch 3 teilbar und durch 2 teilbar, dann auch durch 6 teilbar, also müssen es immer 6 buchstaben sein, kann ich das dann einfach durch (a+b+c)^6n beschreiben? Danke schonmal |
|
|
15.11.2015, 12:42 | Auf diesen Beitrag antworten » |
eulerscheZahl | Das Vielfache von 6 wäre ja Vielfaches von 2 UND Vielfaches von 3. Überlegen wir uns das Vielfache von 3. Vielfaches von 3 kriegst du so hin: ^((a|b|c){3})*$ Erst definieren, wie es für genau 3 Buchstaben aussieht. Dann mit dem Stern Vielfache zulassen. |
15.11.2015, 12:58 | Auf diesen Beitrag antworten » |
Schattenklinge | Hi, was bedeutet denn dieses ^ vorne dran? Die Schreibweise ist mir nicht bekannt. ((a+b+c)(a+b+c)(a+b+c))* sind 3 buchstaben, durch 3 teilbar, vielfaches von 3 ist da auch drin. jetzt hätte ich gesagt das leere wort noch und ((a+b+c)(a+b+c))*. das erscheint mir aber bisschen einfach... |
15.11.2015, 13:20 | Auf diesen Beitrag antworten » |
eulerscheZahl | ^ ist der Zeilenanfang, $ das Ende. So stelle ich sicher, dass nicht ein Teil des Wortes auf 5 Buchstaben gefunden wird. Das leere Wort ist schon enthalten, da der Stern auch für 0 mal stehen kann (mindestens einmal wäre +). Jetzt noch ODER verknüpfen mit 2 Buchstaben, dann bist du fertig mit der a). Nimm dir einen Texteditor (z.B. notepad++ für Windows oder gedit für Linux), dann kannst du Texte durchsuchen und rumprobieren. |
Anzeige | |
|
|
15.11.2015, 13:29 | Auf diesen Beitrag antworten » |
Schattenklinge | Hi, also kann ich das so schreiben wie ich es gerade geschrieben hab? ((a+b+c)(a+b+c)(a+b+c))* + ((a+b+c)(a+b+c))* ? |
15.11.2015, 13:32 | Auf diesen Beitrag antworten » |
eulerscheZahl | + ist kein ODER, sondern gibt die Anzahl an. Mit a+b+c findest du also nicht bcb (3 Buchstaben), dafür aber aaaabbbbbbbbc. |
15.11.2015, 13:35 | Auf diesen Beitrag antworten » |
Schattenklinge | Hi, mit + ist bei uns im skript ein oder gemeint... Ich kanns auch so schreiben wie du es meinst: ((a|b|c)(a|b|c)(a|b|c))* | ((a|b|c)(a|b|c))* |
15.11.2015, 13:37 | Auf diesen Beitrag antworten » |
eulerscheZahl | So passt die Sache. Reguläre Ausdrücke sind eigentlich standardisiert, ich sehe den Sinn nicht, seine eigene Version zu definieren |
15.11.2015, 13:56 | Auf diesen Beitrag antworten » |
Schattenklinge | Alles klar, danke nochmal als weitere übung: und wenn ich jetzt die anzahl der a mod 3 = 0 konstruieren oder anzahl der b mod 2 = 0 konstruieren will, wie mach ich das? Gehe ich einfach davon aus, dass ich z.B. sowas mache? Erstmal für mod 3: (a (b|c)* a (b|c)* a(b|c)*)* ? Dann hab ich immer 3mal a und die Anzahl der a sind immer vielfache von 3? |
15.11.2015, 14:01 | Auf diesen Beitrag antworten » |
eulerscheZahl | Kommen erst die a und dann die b, also z.B. aaaaaaaaabbbb, oder können die auch vermischt auftreten? |
15.11.2015, 14:07 | Auf diesen Beitrag antworten » |
Schattenklinge | anzahl a mod 3 = 0 oder anzahl b mod 2 = 0 Das wort ist sonst nicht weiter definiert |
15.11.2015, 14:25 | Auf diesen Beitrag antworten » |
eulerscheZahl | Damit stellst du sicher, dass die Anzahl der a Vielfaches von 3 ist: ^(b|c)*((a(b|c)*){3})*$ Wir haben zu Beginn eine beliebig lange Folge von b und c. Dann kommt drei mal (a, gefolgt von b und c). Diese Gruppe darf aber beliebig oft kommen. |
16.11.2015, 15:28 | Auf diesen Beitrag antworten » |
Müller | ich komme mit dem Vorschlag für Aufgabe b : ( (b+c)* (a+c)* c (b+c)* ) + ( (b+c)* . (a+b) * ) aber ich bin mir nicht sicher , dass alles abgedeckt ist |
16.11.2015, 15:48 | Auf diesen Beitrag antworten » |
eulerscheZahl | Ist das + jetzt wieder ein ODER? Wie auch immer, es klappt nicht wie geplant. Dafür gibt es die "negative look-ahead assertion". ^((?!ab).)*$ |
|
Verwandte Themen
Die Beliebtesten » |
|
Die Größten » |
|
Die Neuesten » |