Reguläre Ausdrücke - Lösungen des praktischen Kurses
Baustelle: Dieser Artikel ist eine Baustelle. Das heißt, jemand hat sich dieses Artikels angenommen und überarbeitet ihn gerade. |
Übersicht: https://wiki.debianforum.de/Regul%C3%A4re_Ausdr%C3%BCcke
Teil 01
In diesem Teil gibt es noch keine richtigen oder falschen Lösungen, daher gibt es nur eine Wiederholung der Aufgabenstellung. Antworten von Forenmitgliedern finden sich in dieser Diskussion 183942
- Welche Suchprobleme hattest du schon, die du entweder nicht lösen konntest oder für die du viel Handarbeit investieren musstest?
- Kennst du Programme, deren Stringsuche (ohne REs) mehr kann als nur stupide nach einem Suchwort zu suchen?
Oft kann man z.B. die Unterscheidung von Gross-/Kleinschreibung an- und abschalten. Was ist dir da schon begegnet? - An was für Anwendungsfälle denkst du wenn du „Reguläre Ausdrücke“ hörst?
Teil 02
2.1
- Aufgabe
- Das Escapezeichen ist der Unterstrich (_).
- Literale Zeichen sind die Standardzeichen.
- Schreibe den Ausdruck für das literale Wort: „Haus“.
- Lösung
Haus
2.2
- Aufgabe
- Das Escapezeichen ist der Unterstrich (_).
- Metazeichen sind die Standardzeichen.
- Schreibe den Ausdruck für das literale Wort: „Haus“.
- Lösung
_H_a_u_s
2.3
- Aufgabe
- Das Escapezeichen ist das grosse X.
- Metazeichen sind die Standardzeichen.
- Schreibe den Ausdruck für das literale Wort: „Haus“.
- Lösung
XHXaXuXs
2.4
- Aufgabe
- Das Escapezeichen ist das kleine a.
- Literale Zeichen sind die Standardzeichen.
- Schreibe den Ausdruck für das literale Wort: „Haus“.
- Lösung
Haaus
2.5
- Aufgabe
- Suche dir ein Escapezeichen aus.
- Literale Zeichen sind die Standardzeichen.
- Schreibe die Zeichenfolge: Literales ‚D‘, literales ‚F‘, literales ‚D‘, literales ‚E‘, Metazeichen ‚J‘, literales ‚R‘, literales ‚E‘, literales ‚s‘, literales ‚!‘, Metazeichen ‚J‘, Metazeichen ‚@‘.
- Lösung
- Mit Underline (_) als Metazeichen:
DFDE_JREs!_J_@
2.6
- Aufgabe
- Schreibe den gleichen Text aus (5) aber mit Metazeichen als Standardzeichen.
- Lösung
- TODO
- Das Escapezeichen ist die öffnende runde Klammer (‚(‘). Suche dir aus, welche Zeichenart die Standardzeichen sind. Schreibe einen Ausdruck mit nur öffnenden und schliessenden runden Klammern und erkläre ihn anschliessend.
- Das Escapezeichen ist das Komma (,). Literale Zeichen sind die Standardzeichen. Beschreibe den Ausdruck (vgl. (5)): „A,BCD,E,FG,,H“
- Das Escapezeichen ist das Komma (,). Metazeichen sind die Standardzeichen. Beschreibe den Ausdruck: „hello, world“
- Das Escapezeichen ist das kleine a. Literale Zeichen sind die Standardzeichen. Beschreibe den Ausdruck: „Haus“
- Das Escapezeichen ist das kleine a. Literale Zeichen sind die Standardzeichen. Beschreibe den Ausdruck: „Haaus“
- Das Escapezeichen ist das kleine a. Metazeichen sind die Standardzeichen. Beschreibe den Ausdruck: „Haaus“
- Schreibe ein Programm, das literalen Text passend escapet. Das Escapezeichen und die Entscheidung, welche Zeichenart die Standardzeichen sind, sollen variabel sein (z.B. CLI-Argumente). Prüfe damit deine Lösungen für die Aufgaben (1) bis (7).
- Auf die vorigen Aufgabe aufbauend: Schreibe ein Programm, das den escapeten Text wieder einliest und eine sprachliche Beschreibung davon ausgibt, ähnlich wie in (5). Prüfe damit deine Lösungen für die Aufgaben (8) bis (12).
Teil 03
- Schreibe einen egrep-Ausdruck der die Zeichenkette „Reiter“ matcht. Teste ihn entweder so: Wenn das Wort „Reiter“ ausgegeben wird, hat der Ausdruck gematcht. Oder wende den egrep-Befehl auf den Text schwäbische-kunde.txt (s.u.) an. Dort werden dann alle Zeilen ausgegeben, die „Reiter“ enthalten. Wenn du `egrep -o' verwendest, dann werden nur die gematchten Worte selbst ausgegeben.
user@debian:~$ echo "Reiter" | egrep 'DEIN_AUSDRUCK'
- Schreibe einen egrep-Ausdruck der die Zeichenkette „Viel Steine“ matcht.
- Schreibe einen egrep-Ausdruck der die Zeichenkette „heil'gen“ matcht.
- Schreibe einen egrep-Ausdruck der die Zeichenkette „Er sprach: "Sagt an,“ matcht.
- Schreibe einen egrep-Ausdruck der die Zeichenkette „eben.“ matcht. Testet mit ‚-o‘ und ohne.
- Schreibe einen egrep-Ausdruck der die Zeichenkette „?“ matcht.
- Vergleiche diese egrep-Ausdrücke mit der Verwendung von fgrep, welches eine simple Stringsuche umsetzt. Bei fgrep werden alle Zeichen literal interprätiert. Wo liegen die Unterschiede? (Bis zu diesem Zeitpunkt wird euch egrep noch nicht besser als fgrep vorkommen. Das aendert sich bald.)
- Verwende egrep für ein Stück Quellcode, der Sonderzeichen enthält. Schreibe dafür egrep-Ausdrücke, die Sterne, Klammern und Punkte matchen.
Inputtext: schaebische-kunde.txt 41651
Teil 04
- Schreibe einen egrep-Ausdruck, der sowohl eine Alternation enthält als auch das Pipezeichen literal matcht und wende ihn auf einen dazu passenden Eingabetext an.
- Finde ein inhaltlich sinnvolles Beispiel für eine zwei- oder dreifach verschachtelte Alternation. ;-)
- Schreibe einen egrep-Ausdruck (nur mit Alternation und Unterausdrücken), um die Schreibweisen Maier, Meier, Mayer, Meier zu matchen.
- Ergänze (3) um die Schreibeweise Myer.
- Finde alternative Ausdrücke für (3) und (4) (ohne andere RE-Operatoren zu verwenden, sondern nur indem du anders gruppierst).
- Versuche diese Aufgaben auch mit fgrep umzusetzen. Was sind deine Erkenntnisse?
- Braucht man runde Klammern um den gesamten Ausdruck wenn man eine Alternation (auf oberster Ebene) verwendet?
Teil 05
Diskussion 184152 Schreibe Reguläre Ausdrücke, wenn möglich, dann gerne verschiedene Varianten. Setzte sie mit egrep um und teste sie gegen selbst ausgedachten Input.
- RE für eine Hexadezimalziffer.
- RE für eine dreistellige Ganzzahl
- RE für eine dreistellige Ganzzahl mit (Pflicht-)Vorzeichen.
- RE für einen Euro-und-Cent-Betrag kleiner 10,-.
- RE für die 31 Tage des Januars (zweistelliges Format mit führender Null). Zwei Varianten.
- RE für die 28 Tage des Februars (zweistelliges Format mit führender Null). Zwei Varianten.
- RE für ein beliebiges Zeichen, das kein Buchstabe ist.
- RE für eine beliebige Ziffer. Drei verschiedene Varianten.
- RE für ein Zeichen, das kein Circumflex (^) ist.
- RE für eine Zeichenklasse, die nur einen Circumflex matcht.
- RE für ein Minus oder eine eckige Klammer.
- RE die alles ausser einer schliessenden eckigen Klammer oder einem Circumflex matcht.
- Schreibe zwei verschiedene REs, die beide einen Backslash matchen.
- Was matcht die Zeichenklasse ‚[A-z]‘ ausser Buchstaben sonst noch? (Zeichensatz: US-ASCII)
- RE, die einen Tab matcht. Versuche mehrere Varianten zu finden.
- Schreibe einen egrep-Ausdruck (nun auch mit Zeichenklassen), um die Schreibweisen Maier, Meier, Mayer, Meier und Myer zu matchen.
- Schreibe eine RE, die den String „8)“ matcht. ;-) (Das ist eine ernst gemeinte Aufgabe und ist ist mit den bisher gelernten RE-Möglichkeiten umsetzbar. Anmerkung: im Thread hat diese Aufgabe die Nummer 18)
Teil 06
- Matche mit einer RE allen Input.
- Extrahiere mit alle Zahlen aus einem Text.
user@debian:~$ egrep -o
- Matche in einem XML-Input mit einer RE (ohne Alternation) die Beginn- und Ende-Tags
<h1>
und</h1>
- Schreibe die entsprechenden Intervallausdrücke für die drei anderen Quantoren: * + ?
- Erkläre die RE: ‚**‘. Auf was wird sie matchen?
- „Bananen?“ -- Dies ist keine Frage, sondern?
- Matche alles bis „ENDE“ (inklusive).
- Matche den Inhalt eines Single-Quoted Strings (dieser kann das Single-Quote nicht enthalten).
- Matche einen Satz, d.h. von einem Grossbuchstaben bis zum nächsten Satzendezeichen. (Zweimal drüber nachdenken und testen. Der erste Ansatz ist nicht unbedingt ausreichend!)
- Matche grosse Geldwerte mit Tausendertrenner.
- Finde ein sinnhaftes Praxisbeispiel für eine RE mit Punkt aber ohne Quantoren.
Teil 07
Teil 07: Aufgaben
Aufgaben:
1) Schreibe eine RE die immer matcht.
2) Schreibe eine RE die niemals matcht.
3) Schreibe eine RE die leere Zeilen matcht.
4) Filtere alle leere Zeilen weg.
5) Wie kann der Circumflex den Zeilenanfang matchen, wenn er nicht als erstes Zeichen in der RE steht?
Teil 07: Lösungen
[TODO]