Alle Artikel mit dem Schlagwort: reguläre Ausdrücke

Regex-Rezept: Sektionsblöcke in INI-Dateien finden

Problem Sie müssen jeden vollständigen INI-Sektionsblock finden (also eine Sektionsüberschrift und alle Name/Wert-Paare der Sektion), um eine INI-Datei aufzuteilen oder jeden Block getrennt zu verarbeiten. Lösung In Rezept 8.12 wurde gezeigt, wie man die Sektions-Überschrift in einer INI-Datei findet. Um eine gesamte Sektion zu finden, beginnen wir mit dem gleichen Muster aus dem Rezept, suchen aber weiter, bis wir das Ende des Strings oder ein Zeichen [ finden, das am Anfang einer Zeile steht (da damit der Anfang einer neuen Sektion beginnt): Diskussion Dieser reguläre Ausdruck findet zunächst mithilfe des Musters ‹^\[[^\]\r\n]+]› eine Sektionsüberschrift in einer INI-Datei. Dann sucht er Zeile für Zeile weiter, sofern sie nicht mit [ beginnt. Schauen Sie sich den folgenden Ausgangstext an: In diesem String findet die Regex zwei Übereinstimmungen. Die erste reicht vom Anfang des Strings bis zu der leeren Zeile vor „[Sektion2]“. Die zweite Übereinstimmung reicht vom Anfang der Überschrift von Sektion2 bis zum Ende des Strings. 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, …

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 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 …

Die Geschichte des Begriffs „regulärer Ausdruck“

Der Begriff regulärer Ausdruck kommt aus der Mathematik und der theoretischen Informatik. Dort steht er für eine Eigenschaft mathematischer Ausdrücke namens Regularität. Solch ein Ausdruck kann als Software mithilfe eines deterministischen endlichen Automaten (DEA) implementiert werden. Ein DEA ist ein endlicher Automat, der kein Backtracking nutzt. Die Textmuster, die von den ersten grep-Tools genutzt wurden, waren reguläre Ausdrücke im mathematischen Sinn. Auch wenn der Name  geblieben ist, sind aktuelle reguläre Ausdrücke im Perl-Stil keine regulären Ausdrücke im mathematischen Sinn. Sie sind mit einem nicht deterministischen endlichen Automaten (NEA) implementiert.  Alles, was ein  normaler Entwickler aus diesem kleinen Artikel mitnehmen muss, ist, dass ein paar Informatiker in ihren Elfenbeintürmen sehr verärgert darüber sind, dass ihr wohldefinierter Begriff durch eine Technologie überlagert wurde, die in der realen Welt viel nützlicher ist. Bei O’Reilly ist soeben das Reguläre Ausdrücke Kochbuch erschienen, aus dem dieser Textauszug entnommen ist.