• +49-(0)721-402485-12
Ihre Experten für XML, XQuery und XML-Datenbanken

Auswertung regulärer Ausdrücke auf Zeichenketten

Zur Auswertung regulärer Ausdrücke beziehen sich die entsprechenden Funktionen im Wesentlichen auf die in XML Schema vorgegebene Syntax, die wiederum an die Notation der Programmiersprache Perl angelehnt ist. Zur Auswertung stehen die in der folgenden Tabelle aufgelisteten XQuery-Funktionen zur Verfügung.

SignaturBeschreibung
fn:matches(
$input as xs:string?,
$pattern as xs:string[,
$flags as xs:string])
as xs:boolean
überprüft, ob der in $pattern angegebene
reguläre Ausdruck durch die Zeichenkette
des ersten Parameters erfüllt wird
fn:replace(
$input as xs:string?,
$pattern as xs:string,
$replacement as xs:string[,
$flags as xs:string])
as xs:string
ersetzt den Teil des Stringwertes von
$input, der auf den angegebenen regulären
Ausdruck zutrifft, mit der in
$replacement übergebenen Zeichenkette
fn:tokenize(
$input as xs:string?,
$pattern as xs:string[,
$flags as xs:string])
as xs:string+
zerlegt eine Zeichenkette in einzelne
Bestandteile, wobei der reguläre Ausdruck
die Trennfunktion übernimmt

Tab. Funktionen zur Auswertung regulärer Ausdrücke

Die Funktion fn:matches() wendet einen regulären Ausdruck auf eine Zeichenkette an und signalisiert, ob dieser Ausdruck erfüllt wird. In welchem Umfang (siehe Erweiterung der regulären Ausdrücke im Folgenden) und wie häufig der reguläre Ausdruck erfüllt wird, ist dabei nicht von Interesse. Folgender Ausdruck liefert alle Operationen, bei deren Beschreibung "Fraktur" (einschließlich Tippfehler, d. h. "Fraktur" , "Fracktur" oder – auf fränkisch – "Fragdur") auftritt:

for $o in fn:collection("...")/...
where fn:matches($o/Beschreibung/text()), "Frac?(kt|gd)ur")
(: analog wäre auch möglich: "Frac?[kg][td]ur" :)
return $o

Der dritte Parameter ist wie bei allen anderen Funktionen zur Auswertung regulärer Ausdrücke optional und kann unterschiedliche Modi zur Steuerung der Auswertung (siehe nachfolgende Bemerkungen) repräsentieren.

Die zweite Funktion, fn:replace(), erweitert die von fn:matches() zur Verfügung gestellte Grundfunktionalität dahingehend, dass jeder Teilstring der Originalzeichenkette, der den regulären Ausdruck erfüllt, durch eine als dritten Parameter übergebene Zeichenkette ersetzt werden kann. Folgender Ausdruck ersetzt jedes Auftreten einer Fraktur durch eine Verschraubung:

fn:replace("Fraktur des linken Oberschenkelknochens",
"Frac?(kt|gd)ur", "Verschraubung")

liefert

"Verschraubung des linken Oberschenkelknochens"

Die dritte Funktion, fn:tokenize(), erlaubt schließlich die Verwendung regulärer Ausdrücke zur Aufspaltung einer einzelnen Zeichenkette in unterschiedliche Teile. Die Funktion als solche wird an folgenden Beispielen illustriert:

fn:tokenize( "Virus ist impfstoffresistent", "\s+")
liefert ("Virus", "ist", "impfstoffresistent")

fn:tokenize("Herz, Leber, Niere, Galle", ",\s*")
liefert ("Herz", "Leber", "Niere", "Galle")

fn:tokenize("Herz,Leber,,Niere,Galle,", ",")
liefert ("Herz", "Leber", "", "Niere", "Galle", "")

Zur Aufteilung von Zeichenketten in entsprechende Bestandteile kann auf Spezialsymbole zurückgegriffen werden, die zusätzlich um quantifizierende Komponenten erweitert werden können. Im Einzelnen werden zum Beispiel die folgenden Spezialsymbole unterstützt:

  • \s für Leerzeichen im weiteren Sinn
  • \t für horizontale Tabulatoren
  • \n für Absatzkennzeichnung
  • \...

Die Häufigkeit des Auftretens von Sonderzeichen kann durch nachgestellte quantifizierende Komponenten geregelt werden. Das +-Symbol beispielsweise signalisiert, dass der vorangegangene Teil eines regulären Ausdrucks mindestens einmal in der zu analysierenden Zeichenkette erfolgreich erkannt worden ist. Für weiter gehende Details zur generellen Methodik der regulären Auswertung wird auf verwiesen.

 

Quelle: "XQuery – Grundlagen und fortgeschrittene Methoden", dpunkt-Verlag, Heidelberg (2004)

<< zurückvor >>