Zum Hauptinhalt springen

6. Motivation and Background (Motivation und Hintergrund)

6. Motivation and Background (Motivation und Hintergrund)

Während reguläre Ausdrücke ursprünglich dazu gedacht waren, eine formale Sprache (Formal Language) zu beschreiben, um eine boolesche Übereinstimmungsfunktion (Boolean Matching Function) zu unterstützen, wurden sie mit Analysefunktionen (Parsing Functions) erweitert, die die Extraktion und Ersetzung beliebiger Teile des übereinstimmenden Textes unterstützen. Mit dieser Anhäufung von Funktionen sind Parsing-Regexp-Bibliotheken anfälliger für Fehler und überraschende Leistungseinbußen geworden, die in Denial-of-Service-Angriffen (Denial-of-Service Attacks) von einem Angreifer ausgenutzt werden können, der den zur Verarbeitung eingereichten regulären Ausdruck kontrolliert. I-Regexp wurde entwickelt, um Interoperabilität zu bieten und weniger anfällig für solche Angriffe zu sein, mit dem Kompromiss, dass seine einzige Funktion darin besteht, eine boolesche Antwort darauf zu geben, ob eine Zeichensequenz mit einem regulären Ausdruck übereinstimmt.

6.1 Implementing I-Regexp (Implementierung von I-Regexp)

XSD-Regexps sind relativ einfach zu implementieren oder auf weit verbreitete Parsing-Regexp-Dialekte zu mappen, mit diesen bemerkenswerten Ausnahmen:

  • Zeichenklassensubtraktion (Character Class Subtraction). Dies ist eine sehr nützliche Funktion in vielen Spezifikationen, fehlt aber leider größtenteils in Parsing-Regexp-Dialekten. Daher wird sie aus I-Regexp weggelassen.

  • Mehrfach-Zeichen-Escapes (Multi-Character Escapes). \d, \w, \s und ihre Großbuchstaben-Komplementklassen zeigen eine große Variation zwischen Regexp-Geschmacksrichtungen. Daher werden sie aus I-Regexp weggelassen.

  • Nicht alle Regexp-Implementierungen unterstützen den Zugriff auf Unicode-Tabellen (Unicode Tables), die das Ausführen von Konstrukten wie \p{Nd} ermöglichen, obwohl die \p/\P-Funktion im Allgemeinen jetzt recht weit verbreitet ist. Während es prinzipiell möglich ist, diese in Zeichenklassen-Übereinstimmungen zu übersetzen, erfordert dies auch den Zugriff auf diese Tabellen. Daher können Regexp-Bibliotheken in stark eingeschränkten Umgebungen möglicherweise keine I-Regexp-Konformität unterstützen.