Mit Assertions (engl. to assert ⇒ behaupten) läßt sich festlegen,
dass vor oder hinter einem Ausdruck etwas stehen muß. Die einfachen
Assertions wie ^, $
oder \b wurden bereits in einem vorherigen Kapitel
beschrieben. In diesem Kapitel werden die komplexeren Assertions behandelt,
welche immer als Unterausdruck angegeben werden.
Dabei werden zwei Arten von Assertions unterschieden:
- solche, die sich auf Bereiche beziehen, die vor der momentan untersuchten Stelle im zu durchsuchenden Text liegen, also bereits abgearbeitet wurden und somit bereits hinter uns liegen (lookbehind assertion), und
- solche, die erst später im zu durchsuchenden Text liegen, sich also noch vor uns befinden (lookahead assertion).
Zu beachten ist, dass die eigentliche Assertion nie Teil des gefundenen Treffers ist. Sucht man also zum Beispiel nach einem Wort, das von einem Punkt gefolgt wird, so würde als Treffer immer nur das eventuelle gefundene Wort zurückgeliefert werden, der folgende Punkt würde nicht dazu gehören. Somit kann man auf Assertions selbst auch keine Quantifier anwenden.
Lookbehind-Assertions
...
(?<= positiv, (?<! negativ
...
Positive Lookbehind-Assertions
...
(?<=behauptung)
...
Negative Lookbehind-Assertions
...
(?<!behauptung)
...
Lookahead-Assertions
Lookahead-Assertions beginnen immer mit (?=,
wenn es sich um eine positive Assertions handelt (also eine, die behauptet,
dass etwas vorhanden sein soll) bzw. mit (?!,
falls es sich um eine negative Assertion handelt (also eine, die behauptet,
etwas sei nicht vorhanden).
Positive Lookahead-Assertions
Positive Lookahead-Assertions werden durch (?=behauptung)
ausgedrückt. Als Behauptung kann ein beliebiger gültiger Regulärer Ausdruck angegeben
werden.
Positive Lookahead-Assertions behaupten immer, dass ein Ausdruck von etwas
gefolgt werden muss. Der Ausdruck
#\d+(?=\.)#
trifft auf eine beliebig lange Zahl zu, die von einem Punkt gefolgt wird, der
Punkt selbst ist aber nicht Teil des Treffers.
Negative Lookahead-Assertions
Negative Lookahead-Assertions legen fest, dass ein Ausdruck nicht
von etwas gefolgt wird. Die Syntax lautet hier
(?!behauptung). Die Behauptung muss wiederum ein
gültiger Regulärer Ausdruck sein.
Analog zum vorherigen Beispiel lässt sich mit diesem Ausdruck
#\d+(?!\.)#
eine Zahl finden, die nicht von einem Punkt gefolgt wird.
Verwandte Themen
Kapitelnavigation
- Letzte Änderung: 24.07.2010, 03:39:02
- © 2003 - 2010 nophia web