faecher:informatik:oberstufe:automaten:regulaere_ausdruecke:start

Dies ist eine alte Version des Dokuments!


Beschreibung regulärer Sprachen mit regulären Ausdrücken

Reguläre Sprachen können außer durch eine Grammatik auch durch sogenannten reguläre Ausdrücke beschrieben werden.

Reguläre Ausdrücke formuliert man mit regulären Operatoren. Die wichtigsten regulären Operatoren sind die folgenden:

  • a* - "a-Stern": a beliebig oft (auch 0 mal) hintereinander
  • ab - Verkettung: ein a, dann ein b
  • a|b - Oder: entweder ein a oder ein b
  • Mit runden Klammern () können Teilausdrücke gruppiert werden

Beispiele

(1) α1 = c*h* beschreibt alle Zeichenketten, die zunächst aus beliebig vielen Buchstaben c bestehen und anschließend aus beliebig vielen Buchstaben h. 1). L1={ε,c,h,ccch,ccchhh,hhhh,cc,…}.

(2) α2 = c*|h* beschreibt die alle Zeichenketten, die entweder nur aus c's oder nur aus h's bestehen. L2={ε,c,h,cc,hh,ccc,hhh,…}.

(3) α3 = (c|h)* beschreibt die alle Zeichenketten, die aus beliebig vielen c's und h's bestehen. L3={ε,c,h,hc,ch,ccc,hchh,…}.


(A1)

Welche Sprachen werden durch die folgenden regulären Ausdrücke beschrieben? Liste eine Beispielmenge von akzeptierten Wörtern auf, aus der hervorgeht, welche Regeln gelten.

(A) α4 = 01*0 L=

(B) α5 = (01)* L=

(C) α6 = 0|(10*)* L=

(D) α7 = (1(110)*)* L=

(E) α8 = 1(1*|10*) L=

(F) α9 = 0|1*|10* L=

(G) α10 = 1*0*(0|1) L=

Mit der "Minimalausstattung" von drei Operatoren (ohne die Klammern) lassen sich im Prinzip schon alle regulären Ausdrücke schreiben. Bequemer, kürzer und übersichtlicher geht es, wenn man weitere Operatoren hinzunimmt, hier ist allerdings zu beachten, dass es unterschiedliche "Dialekte" solcher Erweiterungen gibt.

Die meisten Programmiersprachen verfügen über Funktionen oder Bibliotheken, um Strings anhand von regulären Ausdrücken zu finden. Meist gibt es auch weitere Funktionen wie Rückbezüge, mit denen sich komplexe Ersetzungen und Ähnliches realisieren lassen.

Auf der Seite https://regex101.com/ kannst du reguläre Ausdrücke testen. Außerdem werden die Ausdrücke und Matches erklärt.


(A2)

Öffne die Seite https://regex101.com/ und sorge dafür, dass die Einstellungen wie im Screenshot zusehen angepasst sind2)

Überprüfe jetzt deine Ergebnisse aus Aufgabe 1, indem du den regulären Ausdruck in die Eingabezeile "regular Expression" schreibst und die zu testenden Wörter der regulären Sprache in das Feld "Test String", pro Zeile ein Wort.

Achtung: Weil die regulären Ausdrücke nach der Greedy Strategie angewandt werden, musst du deine regulärer Ausdruck inklusive Zeilenanfang (^) und Zeilenende ($) testen, sonst klappts nicht - siehe Screenshot. Probiere einfach aus, was passiert, wenn du diese beiden Zeichen weglässt.

(A3) Gültige Telefonnummern

Es soll erkannt werden, ob ein String das korrekte Format für eine Telefonnummer hat.

Eine korrekte Telefonnummer besteht aus:

  • Einer Vorwahl, die mit einer 0 beginnt und danach mindestens eine andere Ziffer enthält.
  • Einem der folgenden Zeichen zur Abtrennung der Vorwahl: -, / oder Leerzeichen
  • Einer mindestens einstelligen Zahl, die nicht mit 0 beginnt.

1)
"Erst beliebig viele c's, dann beliebig viele h's" - wobei "beliebig viele auch "keines" bedeuten kann.
2)
Regex Flavor Java 8, Funktion Match, regex Optionen gm
  • faecher/informatik/oberstufe/automaten/regulaere_ausdruecke/start.1678125935.txt.gz
  • Zuletzt geändert: 06.03.2023 18:05
  • von Frank Schiebel