Ansicht
Dokumentation

ABENREGEX_EXCEPTIONS - REGEX EXCEPTIONS

ABENREGEX_EXCEPTIONS - REGEX EXCEPTIONS

BAL_S_LOG - Application Log: Log header data   General Material Data  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

- Ausnahmen

Ungültige reguläre Ausdrücke, die statisch erkennbar sind, führen zu Syntaxfehlern. Fehler, die während der Verarbeitung erkannt werden, führen zu behandelbaren Ausnahmen der Klassen CX_SY_REGEX_... oder CX_SY_..._REGEX.... Solche Ausnahmen können aufgrund von ungültiger Syntax oder ungültigen Operationen auftreten.

Eine besondere Ausnahme kann bei einem regulären Ausdruck auftreten, der zwar syntaktisch korrekt, aber zu komplex ist. Dann kann er von den Bibliotheken, die im ABAP-Kerne integriert sind, nicht ausgeführt werden und es kommt zu einer Ausnahme der Klasse CX_SY_REGEX_TOO_COMPLEX.

Ein regulärer Ausdruck ist zu komplex, falls die Anzahl von Zustandsübergängen eine gewisse Grenze überschreitet. Dies ist in der Regel der Fall, falls es sich um ungünstig programmierte oder inadäquate reguläre Ausdrücke handelt, die für bestimmte Texte zu extensiven Rückverfolgungen führen würden.

Hinweise

  • Das Auftreten der Ausnahme CX_SY_REGEX_TOO_COMPLEX hängt sowohl vom regulären Ausdruck als auch vom abzugleichenden Text ab. Ein regulärer Ausdruck, der bei einem Text funktioniert, kann bei einem anderen Text zur Ausnahme führen.

Beispiel

Der folgende Quelltextabschnitt zeigt, dass ein eher einfacher regulärer Ausdruck .*X.* ab einer Textlänge von mehreren hundert Zeichen zu einer Ausnahme im der POSIX-Bibliothek führt Wegen der Leftmost-longest-Regel und des gierigen Verhaltens des Verkettungsoperators * müssen alle Fundstellen von Unterfolgen, die zum ersten Teil des regulären Ausdrucks (.*) passen, intern gespeichert werden bis das letzte X gefunden wurde. In einem regulären POSIX-Ausdruck sollte eine Verkettung wie .*, die zu beliebigen Unterfolgen passt, am Anfang eines regulären Ausdrucks in der Regel also vermieden werden. In der PCRE-Bibliothek führt die gleiche Kombination aus regulärem Ausdruck und Text nicht zu einer Ausnahme. Dennoch zeigt der letzte Teil des Beispiels, dass ungünstige Kombinationen auch zu einer Ausnahme in der PCRE-Bibliothek führen können.

Im Fall von .*X.* ist die Suche für jede Zeichenkette erfolgreich, die mindestens ein X und sonst beliebige Zeichen enthält. Für eine solche Suche ist ein regulärer Ausdruck gar nicht notwendig und kann ersetzt werden, entweder durch

FIND SUBSTRING 'X' IN text.
IF sy-subrc = 0.
  ...
ENDIF.

oder durch

IF text CS 'X'.
  ...
ENDIF.






General Material Data   BAL Application Log Documentation  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 4248 Date: 20240523 Time: 104016     sap01-206 ( 77 ms )