Methode 3: Ein Internet-Hostname in Anführungszeichen

(Auszug aus "Reguläre Ausdrücke" von Jeffrey E. F. Friedl)

Ich hatte Ihnen zwei Methoden versprochen, um die kritische Schleife aufzubrechen, jetzt präsentiere ich eine Methode, die als dritte gelten kann. Ich habe sie bei einer Arbeit entdeckt, bei der Internet-Domainnamen wie www.yahoo.com vorkamen – im Wesentlichen durch Punkte getrennte Listen von Subdomain-Namen. Was genau in einer Subdomain vorkommen darf, ist ziemlich kompliziert (siehe dazu Einen Hostnamen auf syntaktische Korrektheit prüfen); für dieses Beispiel nehmen wir an, dass solche Subdomain-Namen der Regex ˹[a-z]+˼ genügen müssen (das ist hinreichend, aber nicht notwendig).

Wenn ˹[a-z]+˼ auf eine Subdomain passt und wenn wir eine durch Punkte getrennte Liste wollen, müssen wir zunächst eine Subdomain erkennen. Danach sind weitere Subdomains optional, aber wenn welche vorkommen, brauchen sie einen Punkt davor. In eine Regex übersetzt, lautet das: ˹[a-z]+(\.[a-z]+)*˼. Wenn ich das so schreibe: ˹[a-z]+(\.[a-z]+)*˼, dann kommt uns das doch irgendwie bekannt vor!

Um die Ähnlichkeit zu untersuchen, vergleichen wir das mit der Regex für Strings in Anführungszeichen. Wir können einen solchen String als Folge von ˹[^\\"]˼ (normal), getrennt durch ˹\\˼. (speziell), alles eingeschlossen von ›"..."‹ betrachten. Wenn wir nach dem Rezept vorgehen, erhalten wir ˹"[^\\"]+(\\.[^\\"]+)*"˼, was wiederum die Regex ist, die wir bei Methode 1 und Methode 2 hatten. Wir gehen eigentlich vom gleichen Prinzip aus wie bei einem Hostnamen – irgendwelche Zeichen, die durch Trennzeichen getrennt sind – und wenden es auf Strings in Anführungszeichen an. So erhalten wir »Folgen von irgendwelchen nicht geschützten Zeichen, die durch geschützte Zeichen voneinander getrennt sind«. Das ist nicht gerade eine naheliegende Betrachtungsweise, aber sie führt anscheinend zum gleichen Resultat.

Die Gemeinsamkeiten sind interessant, aber es gibt auch Unterschiede. Bei Methode 1 hatten wir die Regex so verändert, dass leere Folgen von normal vor und nach einem speziell erlaubt waren. Das können wir hier nicht zulassen, weil eine Subdomain nicht leer sein darf. Auch wenn das Beispiel nicht exakt das Gleiche beschreibt wie die vorherigen, gehört es doch zur gleichen Klasse von Problemen und zeigt, dass das »Schleifen aufbrechen«-Verfahren durchaus flexibel ist.

Zwischen Strings in Anführungszeichen und dem Subdomain-Beispiel gibt es zwei relevante Unterschiede:

  • Domainnamen haben keine Begrenzer am Anfang und Ende.
  • Der normal-Teil darf bei Domainnamen nie leer sein: Aufeinanderfolgende Punkte oder Punkte am Anfang oder am Ende sind nicht zulässig. Bei Strings in Anführungszeichen gibt es solche Einschränkungen nicht. Der innere Teil kann leer sein, kann nur aus geschützten Zeichen bestehen, Backslash darf auf Backslash folgen; allerdings erwarten wir, dass solche Strings nicht häufig auftreten. Daher konnten wir ˹[^\\"]+˼ durch ˹[^\\"]*˼ ersetzen. Bei Domainnamen geht das nicht: Der Punkt ist hier ein obligatorisches Trennzeichen.

  

<< zurück vor >>

 

 

 

Tipp der data2type-Redaktion:
Zum Thema Reguläre Ausdrücke bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:
   

Copyright der deutschen Ausgabe © 2008 by O’Reilly Verlag GmbH & Co. KG
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "Reguläre Ausdrücke" denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

O’Reilly Verlag GmbH & Co. KG, Balthasarstr. 81, 50670 Köln