2025-07-01 20:57:56 +02:00

6.8 KiB

Reguläre Ausdrücke (Regex)

Regex sind Suchmuster für Text. Ein Zeichen steht für sich selbst, außer Sonderzeichen (*+?{}[]\|()), die mit einem Backslash \ "escaped" werden müssen. Wichtige Platzhalter sind . für ein beliebiges Zeichen, \d für eine Ziffer, \w für ein alphanumerisches Zeichen und \s für Leerraum (Whitespace); die jeweiligen Großbuchstaben wie \D negieren die Auswahl. Eine Zeichenauswahl erfolgt mit [...], auch als Bereich [a-z] oder als Negation [^a-z]. Wiederholungen steuern * (0 oder mehr), + (1 oder mehr), ? (optional) und {n,m} (genaue Anzahl); ein angehängtes ? (z.B. *?) macht die Suche "non-greedy". Runde Klammern () fassen Ausdrücke zu Gruppen zusammen, | trennt Alternativen. Die Position wird mit ^ (Anfang) und $ (Ende) einer Zeile oder \b (Wortgrenze) verankert.

Detaillierte Regex-Beispiele

Syntax Beschreibung Beispiel
Platzhalter
. Jedes beliebige Zeichen (außer Zeilenwechsel) a.c
\d Dezimalziffer ([0-9]) \d{3}
\D Jedes Zeichen außer einer Ziffer \D+
\w Jedes alphanumerische Zeichen ([A-Za-z0-9_]) \w+
\W Jedes nicht-alphanumerische Zeichen \W
\s Jede Art von Leerzeichen (Whitespace) hello\sworld
\S Jedes Zeichen außer Whitespace \S+
Zeichenauswahl
[abc] Genau eines der Zeichen a, b oder c gr[ae]y
[^abc] Jedes Zeichen außer a, b oder c [^0-9]
[a-z] Ein Zeichen im Bereich von a bis z [A-Z]
Wiederholungen
* 0 oder mehr Wiederholungen \d*
+ 1 oder mehr Wiederholungen \w+
? 0 oder 1 Wiederholung (optional) colou?r
{n} Genau n Wiederholungen \d{4}
{n,} Mindestens n Wiederholungen \d{2,}
{n,m} Zwischen n und m Wiederholungen \d{2,4}
Gruppen & Alternativen
(...) Gruppiert Ausdrücke und fängt das Ergebnis (https?://)
(?P<N>...) Benannte Gruppe (?P<year>\d{4})
| Logisches ODER GET|POST
\1, \2 Rückverweis auf Gruppe 1, 2 etc. (\w+)\s\1
Position (Anchors)
^ Anfang der Zeile ^From:
$ Ende der Zeile 11$
\A Anfang der gesamten Zeichenkette \A-----BEGIN
\Z Ende der gesamten Zeichenkette \n\Z
\b Wortgrenze \bWort\b
\B Keine Wortgrenze \B-\B

XPath & JSONPath

XPath navigiert durch XML-Dokumente mit / (direktes Kind), // (beliebiger Nachfahre), . (aktueller Knoten) und .. (Elternknoten). Filter (Prädikate) in eckigen Klammern [] wählen nach Position [1], Attribut [@type="x"] oder Inhalt [tag="wert"] aus. Werte liest man mit @attribut oder der Funktion text() aus. JSONPath fragt JSON-Daten ab, beginnend beim Wurzelelement $. Auf Kindelemente wird mit . oder ['name'] zugegriffen. .. sucht auf allen Ebenen (rekursiv) und [*] wählt alle Array-Elemente. Mit [?(@...)] werden Filter angewendet, wobei @ das aktuelle Element ist.

Detaillierte XPath-Beispiele

Syntax Beschreibung Beispiel
tag Wählt alle Knoten mit diesem Tagnamen lecturer
* Wählt alle Kindknoten aus lecturer/*
//tag Wählt passende Nachfahrenknoten auf allen Tiefen //name
. / .. Aktueller Knoten / Elternknoten //name/..
[n] Wählt den n-ten Knoten (Zählung startet bei 1) lecturer[1]
[@attrib] Wählt Knoten, wo das Attribut gesetzt ist lecturer[@type]
[@a="v"] Wählt Knoten, wo Attribut a den Wert v hat lecturer[@type="external"]
[tag] Wählt Knoten, die einen Kindknoten tag haben lecturer[name]
[t="v"] Wählt Knoten mit Kindknoten t mit Inhalt v lecturer[email="a@b.ch"]
@attrib Gibt den Wert des Attributs aus ./lecturer/@type
text() Gibt den Text des Knotens aus ./lecturer/name/text()
count() Gibt die Anzahl der Knoten aus count(./lecturer)
sum() Bildet die Summe der Knoten (müssen Zahlen sein) sum(./lecturer/units)

Detaillierte JSONPath-Beispiele

Syntax Beschreibung Beispiel
$ Das Wurzelobjekt $
.prop Kindobjekt mit dem Namen prop $.movies
['prop'] Alternative zum Punkt $['movies']
..prop Nachfahren auf allen Ebenen (rekursiv) $..year
[n] n-tes Objekt in einem Array (Zählung startet bei 0) $.movies[0]
[*] Alle Einträge eines Objekts oder Arrays $.movies[*]
[n:m] Bereich eines Arrays (Slice) $.movies[3:5]
[?(filter)] Filtert Elemente basierend auf einem Ausdruck $.movies[?(@.year > 1995)]
@ Das aktuelle Element in einem Filter [?(@.title =~ 'Kill.*')]

HTTP-APIs & Web Crawling

HTTP-APIs nutzen URLs, die aus Schema, Host, Pfad und optionalen Query-Parametern (?key=val) bestehen, um Daten via REST-Prinzipien auszutauschen (Methoden: GET, POST, PUT, DELETE). Authentifizierung erfolgt oft über API-Keys. Web Scraping extrahiert Daten aus dem HTML von Webseiten. Die Auswahl der Daten erfolgt mit CSS-Selektoren. Web Crawling folgt Hyperlinks, um weitere Seiten zu verarbeiten. Dabei sollte man die robots.txt respektieren. Die sitemap.xml kann helfen, alle Unterseiten zu finden.

Detaillierte CSS-Selektor-Beispiele

Syntax Beschreibung Beispiel
* Wählt alle Elemente aus *
tag Wählt alle Elemente mit diesem Tagnamen h1
.class Wählt Elemente mit dieser Klasse .intro
#id Wählt das Element mit dieser ID #register
[attr=val] Wählt Elemente, deren Attribut attr den Wert val hat [type="text"]
:first-child Wählt das erste Kind seines Elternelements p:first-child
:nth-child(n) Wählt das n-te Kind (auch 2n, odd, even) tr:nth-child(odd)
A B Wählt alle B, die Nachfahren von A sind (Descendant) div p
A > B Wählt alle B, die direkte Kinder von A sind (Child) ul > li
A + B Wählt B, das direkt auf A auf derselben Ebene folgt h1 + p
A ~ B Wählt alle B, die auf A auf derselben Ebene folgen h1 ~ p

Komplexe Anwendungsbeispiele

Regex-Vorlage

^(?P<timestamp>\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2})\s\[(?P<level>INFO|WARN|ERROR)\]\s\(user:\s'(?P<user>[\w\.-]+@[\w\.-]+)'\)\s"(?P<message>.*?)"$

XPath-Vorlage

//course[@id='cds104']/lecturer[@type='external' and units > 5]/name/text()

JSONPath-Vorlage

$.movies[?(@.year > 1999 && @.title =~ /^Matrix.*/)].actors[*].name

CSS-Selector-Vorlage (für Web Scraping)

main#content article.published:not(.featured) h2 + div.meta a[href*="author"]

GRAPHQL

{
  table1 {
    property1
    property2
    othertable {
      prop_from_other_table
    }
  }
}