Schreibe einen Kommentar

Regex-Rezept: Wie extrahiert man das Schema aus einer URL?

Problem

Sie wollen das Schema aus einem String extrahieren, der eine URL enthält. So wollen Sie zum Beispiel den Wert http für die URL  http://www.regexcookbook.com erhalten.

Lösung

regex78

Diskussion

Es ist sehr einfach, das Schema einer URL zu extrahieren, wenn Sie schon wissen, dass es sich beim Ausgangstext um eine gültige URL handelt. Das Schema steht immer ganz am Anfang der URL. Der Zirkumflex (Rezept 2.5) sorgt dafür, dass diese Anforderung in der Regex umgesetzt wird. Das Schema beginnt mit einem Buchstaben, gefolgt von weiteren Buchstaben, Ziffern, Pluszeichen, Bindestrichen und Punkten. Das finden wir mit den beiden Zeichenklassen ‹[a-z][a-z0-9+\-.]*› (Rezept 2.3). Das Schema wird vom Rest der URL durch einen Doppelpunkt begrenzt. Wir fügen der Regex diesen Doppelpunkt hinzu, um sicherzustellen, dass wir das Schema nur dann finden, wenn die URL wirklich damit beginnt. Relative URLs enthalten kein Schema. Die in RFC 3986 definierte URL-Syntax stellt sicher, dass relative URLs keine Doppelpunkte enthalten, solange es vor diesen Doppelpunkten nicht schon Zeichen gibt, die in einem Schema nicht zulässig sind. Darum mussten wir den Doppelpunkt aus einer der Zeichenklassen entfernen, die den Pfad in Rezept 7.7 finden. Nutzen Sie die Regexes in diesem Rezept für eine gültige, aber relative URL, wird gar kein Schema gefunden.
Da die Regex auf mehr als nur das Schema passt (sie enthält auch den Doppelpunkt), haben wir dem regulären Ausdruck eine einfangende Gruppe hinzugefügt. Wenn die Regex eine Übereinstimmung findet, können Sie den Text der ersten (und einzigen) einfangenden Gruppe auslesen, um das Schema ohne den Doppelpunkt zu erhalten. In Rezept 2.9 erfahren Sie alles über einfangende Gruppen, und in Rezept 3.9 lernen Sie, wie Sie den von solchen einfangenden Gruppen gefundenen Text in Ihrer Programmiersprache auslesen.

Sollten Sie nicht schon wissen, dass Ihr Ausgangstext eine gültige URL ist, können Sie eine vereinfachte Version der Regex aus Rezept 7.7 verwenden. Da wir das Schema extrahieren wollen, können wir relative URLs ausschließen, in denen es nicht angegeben ist. Damit wird der reguläre Ausdruck ein bisschen einfacher.
Da diese Regex die gesamte URL findet, haben wir um den Teil der Regex, der das Schema findet, eine zusätzliche einfangende Gruppe gelegt. Lesen Sie den Text aus, der durch die erste einfangende Gruppe gefunden wurde, um das Schema der URL zu erhalten.

regexcbger.s

Weitere hilfreiche reguläre Ausdrücke finden Sie im soeben erschienenen Reguläre Ausdrücke Kochbuch. Anhand von über 100 Rezepten für C#, Java, JavaScript, Perl, PHP, Python, Ruby und VB.NET lernen Sie, neue Tricks anzuwenden, sprachspezifische Fallen zu umgehen und wertvolle Zeit zu sparen.

Sag's weiter:

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert