Übungsblatt 14a

Regular Expressions / Pattern Matching
PI-1 2008/09
 

Assignment #1: Regular expressions for common data formats:

Schreiben Sie folgende (kleinen) Programme, die jeweils ein Kommandozeilenargument erwarten und von diesem Bestimmen, ob es Element einer bestimmten Sprache ist:

  1. Pattern_int.java: bestimmt, ob Argument eine Integer-Zahl ist
  2. Pattern_float.java: bestimmt, ob Argument eine Gleitkommazahl ist
  3. Pattern_phone.java: bestimmt, ob Argument eine Telefonnummer ist; z.B. +49 (30) 2093-3400
  4. Pattern_Email.java: bestimmt, ob Argument eine Email-Adresse ist
  5. Pattern_Url.java: bestimmt ob Argument eine URL ist
  6. Pattern_Date.java: bestimmt ob Argument eine Datumsangabe ist.

Assignment #2: Challenging regular expressions:

Write a regular expression for each of the following sets of binary strings. Use only the basic operations.

  1. any string except 11 or 111
  2. every odd symbol is a 1
  3. contains at least two 0s and at most one 1
  4. no consecutive 1s
  5. any string that represents a binary number that is divisible by three.

Assignment #3: Java Source Code Formatierer:

Schreiben Sie ein Program jb. Java (java beautyfier), das als Eingabe einen syntaktisch korrekten Java Quelltext erwartet und daraus eine HTML-Seite generiert, die den Java-Text optisch etwas aufgewertet darstellt. Dazu gehören:

  1. Schlüsselwörter (z.B. if, while, for, int, double) werden in rot+fett dargestellt
  2. Semikolons werden in blau dargestellt
  3. Kommentare werden grün gargestellt
  4. Zeichenketten werden orange dargestellt.

Hinweis: Diese Regelungen gelten natürlich nicht innerhalb von Zeichenketten bzw innerhalb von Kommentaren


Assignment #4: Telephone UI:

Auf den Tasten neuerer Telefone befinden sich außer den Nummern auch Buchstaben. Beispielsweise: 2=a,b,c; 3= d,e,f; 4= g,h,i; usw. Auf diese Weise lassen sich Worten Zahlen zuordnen, die man über die Telefontastatur eingeben kann. Sie sollen nun alle die Worte der deutschen Sprache bestimmen, denen auf diese Weise Ihre Telefonnummer zugeordnet wird.
Hinweis: Dazu benötigen Sie ein Wörterbuch aller (oder zumindest vieler) deutscher Worte. So etwas können Sie approximativ erstellen, indem Sie z.B. vom Internet (http://gutenberg.de) öffentlich verfügbare Werke von z.B. Goethe herunterladen und daraus eine Lister aller dort vorkommenden Worte erzeugen.
 


Assignment #5: Kranke Sekretärin:

Eine Sekretärin verletzt sich an beiden Händen jeweils an Daumen, Ringfinger und kleinem Finger. Finden Sie das längste Wort, dass diese Sekretärin ohne Benutzung der verletzten Finger auf einer englischsprachigen Tastatur noch eingeben kann, wenn Sie die Finger ausschließlich so benutzt, wie sie es einmal erlernt hat (siehe Bild).

Alternative Formulierung der Aufgabe: Was ist das längste Wort, dass man auf nebenstehender Tastatur nur mit den gelb, grün, blau und orange gekennzeichneten tasten schreiben kann?



Assignment #6: EMail Address Harvester:

Ziel dieser Aufgabe ist es, eine (möglichst lange) Liste von Email-Adressen zu erstellen. Dazu beginnen wir mit einer Web-Seite (URL über Kommandozeile einzugeben) und durchsuchen diese nach Email-Adressen. Danach verfahren wir in gleicher Weise weiter mit all den Web-Seiten, die von dieser Seite aus referenziert wurden. Dabei soll keine Web-Seite mehrmals bearbeitet werden, und eine gefundene Email-Adresse soll nicht mehr als einmal erfasst werden.
Note: http://java.sun.com/developer/TechTips/1999/tt0923.html#tip1 gibt Tipps zum finden von Links auf Web-Seiten (sehr gut, aber auch recht kompliziert)