Was sind reguläre Ausdrücke: Überblick und Tutorial
Ein regulärer Ausdruck ist eine Textschablone, mit der du überprüfen kannst, ob ein Text ein bestimmtes Muster (einen Suchtext) enthält. In Marketing-Tools verwendest du reguläre Ausdrücke beispielsweise zum Filtern von Berichten. Die lassen sich mit regulären Ausdrücken weit besser filtern, als es mit klassischen Filterbedingungen wie enthält oder beginnt mit möglich ist.
In diesem Tutorial lernst du die Grundlagen regulärer Ausdrücke kann. Du erfährst, was reguläre Ausdrücke sind, was Platzhaltersymbole in regulären Ausdrücken sind, welche es gibt und wie sie funktionieren.
Inhaltsverzeichnis
- Was sind reguläre Ausdrücke?
- Wofür brauche ich reguläre Ausdrücke im Marketing?
- Platzhaltersymbole in regulären Ausdrücken
- Wo kann ich reguläre Ausdrücke verwenden?
- Kann ich reguläre Ausdrücke testen?
- Zusammenfassung
Was sind reguläre Ausdrücke?
Stelle dir einen regulären Ausdruck wie eine Schablone vor, wie du sie vielleicht noch aus der Schule kennst.
Statt den Löchern in der Schablone verwendest du in einem regulären Ausdruck Platzhaltersymbole, die für genau ein Zeichen eines Vergleichstextes, wie einer URL, stehen. Passt der reguläre Ausdruck zum Vergleichstext, hast du einen sogenannten Match (Treffer).
Verwendest du einen regulären Ausdruck in einem Filter eines Marketing-Tools wie etwa Google Analytics oder der Search Console, würde dir das Tool die URLs mit einem Match dann in einem Bericht anzeigen.
Wofür brauche ich reguläre Ausdrücke im Marketing?
Du möchtest beispielsweise in einem Marketing-Tool in einem Bericht nur URLs von Blog-Beiträgen sehen, die im Unterverzeichnis /blog/
abgelegt sind.
Nun könnte man meinen, dass man das mit einem enthält oder beginnt mit Vergleichsoperator in einer Filterfunktion erreichen kann. Leider ist das nicht so einfach. Denn ein so gefilterter Bericht kann auch folgende URLs enthalten:
/blog/?page=4
für die Seitennavigation in der Blog-Liste./blog/tag/mein+tag
für sogenannte Tag-Pages (Schlagwort-Seiten)./blog/category/meine+kategorie
für sogenannte Category-Pages (Kategorie-Seiten)/blog/meineseite#sprungmarke
für In-Page Jumps (Sprungmarken)
Noch komplizierter wird es, weil etwa die URL für eine Tag-Page (Schlagwort-Seite) nicht nur /blog/tag/mein+tag
, sondern auch /blog/?tag=mein+tag
lauten kann.
Somit brauchst du, um in einem Bericht nur die Blog-Beiträge im Unterverzeichnis /blog/
zu sehen, aber nicht die anderen oben erwähnten URLs, einen Filter mit:
- Einer Bedingung wie beginnt mit
/blog/
- Mehrere Filter mit enthält nicht Bedingungen für die anderen URLs, etwa um die Tag-Pages auszuschließen.
Dreht es sich in deinem Blog aber noch dazu Reiseberichte und eine URL lautet etwa /blog/3-tage-in-lissabon
haben wir schon das nächste Problem: Aufgrund des nicht enthält Filters für Tag-Pages würde diese URL u.U. ausgeschlossen werden, da sie die Zeichenfolge tag enthält.
Und genau da kommen reguläre Ausdrücke ins Spiel. Das Ziel, nur die Blog-Beiträge im Unterverzeichnis /blog/
zu sehen, aber nicht all die anderen URLs erreicht du mit folgendem, regulärem Ausdruck:
^\/blog\/[a-z0-9-]+
Das ist doch deutlich kürzer als ein Filter mit mehreren enthält und enthält nicht Bedingungen.
Die kryptisch wirkenden Zeichen im obigen regulären Ausdruck sind die oben erwähnten Platzhalter bzw. Tokens. Und die sehen wir uns jetzt an.
Platzhaltersymbole in regulären Ausdrücken
Vorweg, ich beschränke mich hier auf den RE2-Standard für reguläre Ausdrücke, den Google in seinen Marketing-Tools unterstützt. Andere Marketing Tools verwenden möglicherweise andere Standards, die mehr Tokens oder Funktionen bieten.
Diese Platzhaltersymbole lernst du auch in meinem online Kurs reguläre Ausdrücke für Marketer auf Udemy kennen.
Literale
Ein Literal ist die einfachste Form eines Tokens in einem regulären Ausdruck. Es steht für ein Zeichen, das, genauso wie im regulären Ausdruck angegeben (also buchstäblich), im Vergleichstext, etwa einer URL, vorkommen muss.
Nehmen wir noch einmal das Beispiel von vorhin:
^\/blog\/[a-z0-9-]+
Dieser reguläre Ausdruck enthält am Anfang die Literale b, l, o und g. Diese 4 Buchstaben müssen genau wie angegeben, also in Kleinschreibung und in der angegebenen Reihenfolge, im Vergleichstext vorkommen.
Standardmäßig sind reguläre Ausdrücke Case-Sensitiv. Sie unterscheiden als zwischen Groß- und Kleinschreibung.
Nun haben wir im regulären Ausdruck aber auch noch den Slash vor und nach blog, der wie ein Literal (also buchstäblich) berücksichtigt werden soll. Allerdings kann ein Slash in manchen Standards für reguläre Ausdrücke eine besondere Bedeutung haben.
Durch das vorangestellte Backslash escapen wir das unmittelbar darauffolgende Zeichen, also den Slash, der dadurch wie ein Literal behandelt wird, und zwar unabhängig davon, ob es in einem regulären Ausdruck eine besondere Bedeutung hätte.
Jedes Zeichen, das in einem regulären Ausdruck als Token verwendet wird und damit eine spezielle Bedeutung hat, muss _escaped_ werden, damit es als Literal berücksichtigt wird.
Zeichenklassen
Wie in der Einleitung erwähnt, möchten wir verhindern, dass in unserem Bericht URLs von Tag-Pages, Category-Pages und Listenseiten vorkommen, wie etwa diese URLs:
/blog/?page=4
für die Seitennavigation in der Blog-Liste/blog/tag/mein+tag
für sogenannte Tag Pages/blog/category/meine+kategorie
für sogenannte Category-Pages/blog/meineseite#sprungmarke
für In-Page Jumps (Sprungmarken)
Jedoch enthalten diese URLs alle etwas, das unsere Standard-Blog-Beiträge nicht in der URL enthalten, wie etwa einen weiteren Slash, ein Fragezeichen oder sogar ein Hashtag-Symbol.
Und diesen Umstand machen wir uns mit sogenannten Zeichenklassen zunutze, von denen es drei Arten in regulären Ausdrücken gibt.
Zeichenklassen in eckigen Klammern
Die URLs unserer Blog-Beiträge enthalten nur die Zeichen von a-z (Kleinbuchstaben), die Ziffern 0-9 und Bindestriche. Und genau das machen wir uns in einem regulären Ausdruck zunutze:
\/blog\/[a-z0-9-]+
Im obigen regulären Ausdruck siehst du die Angaben aus dem vorherigen Absatz in eckigen Klammern: nämlich a-z, 0-9 und den Bindestrich.
Die eckigen Klammern stehen in einem regulären Ausdruck für eine Zeichenklasse. In den eckigen Klammern gibst du jetzt an, welche Zeichen an dieser Stelle (also nach dem 2. Slash) enthalten sein dürfen. Dabei kannst du in einer Zeichenklasse mehrere Zeichen als Literale oder ganze Bereiche für Zeichen angeben.
Die am häufigsten genutzten Bereiche für Zeichenklassen sind:
- a-z für alle Kleinbuchstaben
- A-Z für alle Großbuchstaben
- 0-9 für alle Ziffern
Ferner kannst du in einer Zeichenklasse auch einzelne Zeichen, wie den Bindestrich, angeben. Somit bedeutet die Zeichenklasse [a-z0-9-], dass an dieser Stelle im Vergleichstext genau ein Kleinbuchstabe oder eine Ziffer oder ein Bindestrich vorkommen darf.
Streng genommen ist die Zeichenklasse in eckigen Klammern so etwas wie eine *oder* Funktion. Die Zeichenklasse [aA] würde etwa bedeuten: ein kleines *a* oder ein großes *A*.
Zeichenklasse “Punkt”
Vorher widmen wir uns aber noch einer besonderen Zeichenklasse, nämlich dem Punkt.
Der Punkt (“.”) steht in einem regulären Ausdruck für genau ein beliebiges Zeichen, inklusive Leer- und Sonderzeichen. Würde ich also in unserem regulären Ausdruck die eckigen Klammern, samt deren Inhalt durch einen Punkt ersetzen, würden wir unser Ziel damit nicht erreichen, denn der Punkt steht ja für ein beliebiges Zeichen, also auch für Zeichen, die wir in unserem Beispiel vermeiden möchten, wie weitere Slashes, ein Hashtag oder auch ein Fragezeichen.
Hinweis: Möchtest du einen Punkt als Literal (also als Punkt und nicht als Zeichenklasse verwenden, musst du ihn escapen; z.B. download.pdf
Perl Zeichenklassen
Die sogenannten Perl-Zeichenklassen sind die dritte Art bzw. Variante, wie du Zeichenklassen in einem regulären Ausdruck angeben kannst. Der Name Perl hat für diese Zeichenklassen aber keine besondere Bedeutung, sondern stammt lediglich von der Programmiersprache Perl.
Eine Perl-Zeichenklasse beginnt mit einem Backslash gefolgt von einem bestimmten Zeichen für die Zeichenklasse, etwa:
- \s (mit kleinem “s”) für genau ein Whitespace (wie z.B. ein Leerzeichen)
- \S (mit großem “S”) für kein Whitespace
- \d für eine Ziffer (entspricht der Zeichenklasse [0-9])
- \D für keine Ziffer
- \w für Wort-Zeichen (entspricht der Zeichenklasse [0-9A-Za-z_]
- \W für das genaue Gegenteil von \w (also kein Wort-Zeichen).
Besonders häufig wird die Per-Zeichenklasse \s für Whitespace benötigt, beispielsweise um Branded und Non-Branded Suchanfragen in der Search Console zu filtern.
Nehmen wir an, deine Website heißt “no camera bag”. Bei der Suche nach dieser Marke wird der Suchbegriff manchmal zusammen (nocamerabag) und manchmal auseinander (no camera bag) geschrieben. Manchmal wird aber auch nach (no camerabag) gesucht.
Um alle diese 3 Varianten mit einem regulären Ausdruck zu finden, könntest du diesen RegeEx verwenden:
^No\s?camera\s?bag$
Das ? nach der Zeichenklasse ist ein sogenannter Quantor - und darum geht es im nächsten Kapitel.
Quantoren
In unserem RegEx (englische Abk. für Regular__Expression) haben wir ein Beispiel für einen Quantor verwendet, nämlich das Plus.
\/blog\/[a-z0-9-]+
Der Plus-Quantor bedeutet, dass der Token unmittelbar davor (in unserem Fall die Zeichenklasse) mindestens einmal vorkommen muss und beliebig oft vorkommen darf.
Die drei häufigsten Quantoren in regulären Ausdrücken sind:
- Das Plus. Es bedeutet mindestens einmal, aber dann beliebig häufig (also einmal oder öfter)
- Der Stern. Er bedeutet beliebig häufig. Und das bedeutet bei regulären Ausdrücken auch, dass der Token gar nicht vorkommen muss (also 0-mal, oder öfter)
- Das Fragezeichen. Es bedeutet gar nicht oder *genau ein mal *(also 0-mal oder genau einmal).
Wenn du mit diesen Quantoren nicht auskommst, kannst du die Häufigkeit auch in geschwungenen Klammern angeben:
- {1,5} bedeutet mindestens einmal, aber maximal 5-mal.
- {2,} bedeutet mindestens zweimal, aber dann beliebig häufig
- {2} bedeutet genau zweimal.
Erweitere ich nun unseren bisherigen regulären Ausdruck dahin gehend, dass die URL mit einer 4-stelligen Jahreszahl enden muss, würde er so aussehen:
\/blog\/[a-z0-9-]+[0-9]{4}$
Die Bedingung, dass die URL mit einer 4-stelligen Jahreszahl aufhören muss, erreichen wir durch 3 Dinge:
- Das Hinzufügen der Zeichenklasse [0-9]
- Die Angabe des Quantors {4}, um festzulegen, dass die Zeichen der Zeichenklasse davor (die Ziffern 0-9) genau 4x vorkommen müssen
- Die Angabe des $-Symbols
Und das Dollar-Symbol am Ende des regulären Ausdrucks ist ein sogenannter Anker.
Anker
In den meisten Markting-Tools wird ein regulärer Ausdruck wie ein enthält behandelt - eine Ausnahme stellt Google Analytics 4 dar. Da muss ein regulärer Ausdruck auf die gesamte URL matchen.
Somit bedeutet der reguläre Ausdruck, den wir bisher als Beispiel verwendet haben, dass eine URL irgendwo den Text /blog/
enthalten darf. Der reguläre Ausdruck würde also auch folgende URL finden: /dev/test/demo/ua/4711/blog/ein-blog-beitrag
Und um genau das zu verhindern und anzugeben, ob der Vergleichstext mit einem bestimmten Text beginnen oder enden muss, gibt es diese zwei Anker-Symbole:
- ^ bedeutet, dass der reguläre Ausdruck am Anfang des Vergleichstextes matchen muss
- $ bedeutet, dass der reguläre Ausdruck am Ende des Vergleichstexes matchen muss.
Verwendest du in einem regulären Ausdruck ein ^ und ein $ bedeutet es, dass der reguläre Ausdruck auf den gesamten Vergleichstext, wie etwa eine URL, matchen muss:
^\/blog\/[a-z0-9-]+[0-9]{4}$
Somit bedeutet nun der reguläre Ausdruck, den wir bisher entwickelt haben, dass in einem damit gefilterten Bericht nur folgende URLs enthalten wären:
- Sie beginnen mit /blog/ (aufgrund der Literale /, b, l, o, g /), wobei die Literale / durch das escape mit einem Backslash wie Literal berücksichtigt werden
- Danach folgt mindestens eines, aber beliebig viele Kleinbuchstaben, Ziffern oder ein Bindestrich aufgrund der Zeichenklasse und des Plus-Quantors.
- Sie enden mit genau 4 Ziffern, was wir durch den Anker $ nach der Zeichenklasse [0-9] mit dem Quantifier {4} angegeben haben.
Tipp: Wenn du mit einem regulären Ausdruck auf einen leeren Text prüfen möchtest (z.B. im Google Tag Manager), verwende den regulären Ausdruck ^$. Er steht für einen leeren Text.
Operatoren und Gruppen
Nun wollen wir unseren bisherigen regulären Ausdruck noch etwas weiter verfeinern. Wir möchten nicht alle Blog-Beiträge im Unterverzeichnis /blog/ finden, sondern nur diejenigen, die entweder mit dem Text (=den Literalen) how-to oder tutorial beginnen.
Dafür verwenden wir nun einerseits eine sogenannte Gruppe und einen Operator:
^\/blog\/(how-to|tutorial)[a-z0-9-]+[0-9]{4}$
Die runden Klammern im obigen Ausdruck stehen für eine Gruppe. Damit werden ein oder mehrere der bisher erwähnten Tokens zusammengefasst. Zwischen den beiden Texten how-to und tutorial steht der vertikale Strich (“|”). Er bedeutet oder.
Somit bedeutet das für unseren regulären Ausdruck, dass er uns in einem Bericht nur folgende URLs liefern würde:
- Sie beginnen mit
/blog/
(aufgrund der Literale /, b, l, o, g /), wobei die Literale / durch das escape mit einem Backslash erst zum Literal werden - Danach folgenden entweder die Literale how-to oder tutorial
- Danach folgt mindestens eines, aber beliebig viele Kleinbuchstaben, Ziffern oder ein Bindestrich
- Sie enden mit genau 4 Ziffern, was wir durch den Anker $ nach der Zeichenklasse [0-9] mit dem Quantifier {4} angegeben haben
Wo kann ich reguläre Ausdrücke verwenden?
Reguläre Ausdrücke zum Filtern von Daten kannst du in so gut wie allen Marketing-Tools verwenden; etwa in:
- Google Analytics
- Der Google Search Console
- Dem Google Tag Manager
- Looker Studio
- Microsoft Clarity (einem Heatmap-Tool)
- Screaming Frog (einem SEO Tool)
- Google Sheets
Hier ist ein Beispiel, in dem ich zum Filtern von Daten in der Search Console einen regulären Ausdruck verwende.
Kann ich reguläre Ausdrücke testen?
Mit dem kostenlosen Tool regex101.com kannst du reguläre Ausdrücke ganz einfach testen.
So verwendest du das Tool:
- Wähle in der Seitenleiste den Standard PCRE2 aus
- Gib in der Eingabeleiste deinen regulären Ausdruck ein
- Gib im großen Textfeld einen Text, etwa mehrere URLs, ein, die du mit dem regulären Ausdruck prüfen möchtest.
Passt der reguläre Ausdruck auf eine URL, wird die entsprechende Zeile farblich hervorgehoben, so wie im ersten Screenshot der URL. Das Tool regex101.com verwende ich auch in den ersten Lektionen meines Kurses reguläre Ausdrücke für Marketer auf Udemy.
Zusammenfassung
Reguläre Ausdrücke sind ein ziemlich mächtiges Werkzeug, um Daten in Marketing Tools effektiv und effizient zu filtern. Ein regulärer Ausdruck ist Case sensitiv und besteht in der Regel aus mehreren Tokens, wobei ein Token für genau ein Zeichen steht.