Ansicht
Dokumentation

ABENREGEX_POSIX_SYNTAX_OPERATORS - REGEX POSIX SYNTAX OPERATORS

ABENREGEX_POSIX_SYNTAX_OPERATORS - REGEX POSIX SYNTAX OPERATORS

Addresses (Business Address Services)   TXBHW - Original Tax Base Amount in Local Currency  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

- Zeichenfolgenmuster (obsolet)

Zeichenfolgen werden durch Verkettungen oder Operatoren repräsentiert.

Verkettungen

Verkettungen sind gültige reguläre Ausdrücke, die hintereinander geschrieben werden. Sind r und s reguläre Ausdrücke, so stimmt die Verkettung rs mit allen Zeichenfolgen überein, die aus der Verkettung der mit r und s übereinstimmenden Zeichenfolgen gebildet werden können.

Beispiele

Die folgende Tabelle zeigt einige Ergebnisse einer Übereinstimmung.

Muster Text match
H[aeu]llo Hallo X
H[aeu]llo Hello X
H[aeu]llo Hullo X
H[aeu]llo Hollo -

Bei H[aeu]llo handelt es sich um die Verkettung von fünf regulären Ausdrücken für Einzelzeichen.

Operatoren für Zeichenfolgen

Diese Operatoren werden aus den Sonderzeichen {, }, *, +, ?, |, (, ) und \ aufgebaut. Die Sonderzeichen können durch das Voranstellen von \ oder das Einschließen in \Q ... \E zu Literalzeichen gemacht werden.

Verkettungsoperatoren

Die Operatoren {n}, {n,m}, *, + und ? (wobei n und m natürliche Zahlen inklusive Null sind) können direkt hinter einen regulären Ausdruck r geschrieben werden und erzeugen dadurch Verkettungen rrr... des regulären Ausdrucks:

  • Der reguläre Ausdruck r{n} ist gleichbedeutend zu einer n-fachen Verkettung von r. Der reguläre Ausdruck r{0} passt auf eine leere Zeichenfolge und damit auch auf den Offset vor dem ersten Zeichen einer Zeichenfolge, die Zwischenräume zwischen den Zeichen von Zeichenfolgen und den Offset hinter dem letzten Zeichen einer Zeichenfolge.
  • Der reguläre Ausdruck r{n,m} ist gleichbedeutend zu mindestens n und höchstens m Verkettungen von r. Der Wert von n muss kleiner oder gleich dem Wert von m sein. Der Ausdruck r{n,} ist gleichbedeutend zu mindestens n Verkettungen von r.
  • Der reguläre Ausdruck r? ist gleichbedeutend zu r{0,1}, d.h. dem Ausdruck r oder der leeren Zeichenfolge.
  • Der reguläre Ausdruck r* ist gleichbedeutend zu r{0,}, d.h. einer beliebig langen Verkettung von r inklusive der leeren Zeichenfolge. Bei der Verwendung von Untergruppen (siehe unten) und bei einer Textsuche passt r* auf die größtmögliche Unterfolge (gieriges Verhalten).
  • Der reguläre Ausdruck r+ ist gleichbedeutend zu r{1,}, d.h. einer beliebig langen Verkettung von r exklusive der leeren Zeichenfolge. Bei der Verwendung von Untergruppen und bei einer Textsuche passt r+ auf die größtmögliche Unterfolge (gieriges Verhalten).
  • Die regulären Ausdrücke r{n,m}?, r*? und r+? sind für spätere Spracherweiterungen (genügsames Verhalten) reserviert und lösen derzeit die Ausnahme CX_SY_INVALID_REGEX aus.

Hinweis

Für einen regulären Ausdruck mit Verkettungsoperatoren gilt als primäre Regel, dass möglichst der gesamte Ausdruck passen muss. Diese Regel beschränkt die Länge von Zeichenfolgen, die zu Verkettungen mit den Operatoren * und + passen, und damit deren gieriges Verhalten.

Beispiele

Die folgende Tabelle zeigt einige Ergebnisse einer Übereinstimmung.

Muster Text match
Hel{2}o Hello X
H.{4} Hello X
.{0,4} Hello -
.{4,} Hello X
.+H.+e.+l.+l.+o.+ Hello -
x*Hx*ex*lx*lx*ox* Hello X
l+ ll X

Der erste Teilausdruck a+ wird mit den ersten 5 Zeichen "aaaaa" aus text abgeglichen während das letzte Zeichen "a" aus text für den zweiten Teilausdruck a vorbehalten bleibt.

Alternativen

Der Operator | kann zwischen zwei reguläre Ausdrücke r und s geschrieben werden und erzeugt dadurch einen einzigen regulären Ausdruck r|s, der sowohl mit r als auch mit s übereinstimmt.

Hinweis

Verkettungen und andere Operatoren binden stärker als |, d.h. r|st und r|s+ sind gleichbedeutend zu r|(?:st) bzw. r|(?:s+) und nicht zu (?:r|s)t bzw. (?:r|s)+.

Beispiele

Die folgende Tabelle zeigt einige Ergebnisse einer Übereinstimmung.

Muster Text match
H(e|a|u)llo Hello X
H(e|a|u)llo Hollo -
He|a|ullo Hallo -
He|a|ullo ullo X

Untergruppen

Die Operatoren ( ... ) und (?: ... ) gruppieren Verkettungen von regulären Ausdrücken zu einer Einheit und beeinflussen dadurch den Wirkungsbereich anderer Operatoren wie * oder |. Die regulären Ausdrücke (r) und (?:r) stimmen dabei mit dem regulären Ausdruck r überein. Der Unterschied zwischen ( ... ) und (?: ... ) besteht darin, dass der Operator ( ... ) gefundene Teilfolgen in Registern speichert und (?: ... ) nicht.

Hinweis

Das oben erwähnte gierige Verhalten von Verkettungsoperatoren gilt auch für Untergruppen und zwar von links nach rechts. Dabei wird aber nicht die Regel verletzt, dass primär der gesamte reguläre Ausdruck passen muss.

Beispiele

Die folgende Tabelle zeigt einige Ergebnisse einer Übereinstimmung.

Muster Text match
Tral+a Tralala -
Tr(al)+a Tralala X
Tr(?:al)+a Tralala X

Im ersten Ausdruck wirkt die Verkettung mit dem Operator + auf das Literalzeichen l, im zweiten und dritten Ausdruck auf die Untergruppe al.

Untergruppen mit Registrierung

Neben seiner Wirkung zur Bildung von Untergruppen speichert der Operator ( ... ) beim Abgleich des regulären Ausdrucks mit einer Zeichenfolge die Teilfolgen, auf welche die Untergruppen ( ... ) des Ausdrucks passen, der Reihe nach in Registern ab. Jeder Untergruppe ist dabei ein Operator \1, \2, \3, ... zugeordnet, der innerhalb des Ausdrucks hinter seiner Untergruppe aufgeführt werden kann und dabei als Platzhalter für die im zugehörigen Register abgelegte Zeichenfolge wirkt. Bei Textersetzungen kann mit den Sonderzeichen $1, $2, $3, ... auf die letzte Belegung der Register zugegriffen werden.

Die Anzahl der Untergruppen und Register ist nur durch die Kapazität der Plattform begrenzt.

Hinweise

  • Über den Zusatz SUBMATCHES der Anweisungen FIND und REPLACE bzw. die gleichnamige Spalte der mit dem Zusatz RESULTS gefüllten Ergebnistabelle kann auf den Inhalt aller Untergruppenregister einer Fundstelle zugegriffen werden. Die Klasse CL_ABAP_MATCHER enthält hierfür die Methode GET_SUBMATCH.
  • Wenn nur die Gruppierung erforderlich ist und keine Teilfolgen in Registern abgespeichert werden sollen, kann statt ( ... ) der Operator (?: ... ) verwendet werden. Bezüglich der Bildung von Untergruppen haben beide Operatoren die gleiche Wirkung, (?: ... ) speichert aber nichts in Registern.

Beispiele

Die folgende Tabelle zeigt einige Ergebnisse einer Übereinstimmung.

Muster Text match
(["']).+\1 " Hello " X
(["']).+\1 "Hello' -
(["']).+\1 'Hello' X

Die Verkettung (["']).+\1 stimmt mit allen Textfolgen überein, bei denen das erste Zeichen " oder ' ist und das letzte Zeichen gleich dem ersten Zeichen ist. Für die beiden erfolgreichen Überprüfungen enthält das Register die Werte " bzw. '.

Das Beispiel demonstriert das gierige Verhalten des Operators + in Untergruppen und das Zusammenspiel mit der primären Regel, dass möglichst der gesamte reguläre Ausdruck passen muss. Die erste Untergruppe beansprucht möglichst viele Zeichen "a". Ihr werden die ersten 4 Zeichen "aaaa" zugeteilt. Für die beiden anderen Untergruppen verbleibt jeweils noch ein Zeichen "a".

Literalzeichen

Die Operatoren \Q ... \E machen aus allen eingeschlossenen Zeichen eine Zeichenfolge von Literalzeichen, in denen Sonderzeichen keine Wirkung haben.

Die folgende Tabelle zeigt einige Ergebnisse einer Übereinstimmung.

Muster Text match
.+\w\d Special: \w\d -
.+\\w\\d Special: \w\d X
.+\Q\w\d\E Special: \w\d X

Reservierte Erweiterungen

Die Zeichenfolge (? ... ) ist generell für spätere Spracherweiterungen reserviert und löst mit Ausnahme der derzeit schon unterstützten Operatoren (?:... ), (?=...), (?!...) und (?> ... ) die Ausnahme CX_SY_INVALID_REGEX aus.






rdisp/max_wprun_time - Maximum work process run time   Fill RESBD Structure from EBP Component Structure  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 24199 Date: 20240523 Time: 114437     sap01-206 ( 267 ms )