Reguläre Ausdrücke / Regular Expressions
Reguläre Ausdrücke konnen hochkomplexe ABAP-Befehle sein, um Inhalte in einem String zu finden.
Pattern, Text und Match
- Man spricht von “Pattern” um den Suchbefehl anzugeben
- “Text” im zu suchenden Text
- “Match”, wenn das Pattern eine Fundstelle hat.
Testprogramme Reguläre Ausdrücke
Es ist empfehlenswert das Programm DEMO_REGEX zum Einstieg in Reguläre Ausdrücke aufzurüfen.
Über die Testprogramme lässt sich auch die SAP-Dokumentation zu Regulären Ausdrücken aufrufen.
- DEMO_REGEX
- DEMO_REGEX_TOY
SAP-Codingsuchprogramm RS_ABAP_SOURCE_SCAN
- RS_ABAP_SOURCE_SCAN
- Das SAP-Codingsuchprogramm RS_ABAP_SOURCE_SCAN kann auch mit der Syntax von Regulären Ausdrücken verwendet werden.
Coding FIND REGEX
- Im Parameter "P_FIND" steht der regulär Expression (Patter)
- In der Variablen XTLINES-TDLINE ist der String (Text), der durchsucht wird
- In die Variable GF_MOFF wird der Offset von der Fundstelle gefüllt
- In die Variable GF_MLEN wird die Länge des gefunden Strings gefüllt
FIND REGEX p_find IN xtlines-tdline MATCH OFFSET gf_moff MATCH LENGTH gf_mlen.
Beispiel ['][0]{3}[0-9]{7}[']
- Im Projekt sollten hart codierte Lieferanten- und Kundenummern im Coding identifiziert werden
- Es bedeutet die Ziffer 0 kommt im Suchstring 3 x führend vor, dann an den weiteren 7 Stellen die Ziffern 0 bis 9. Führend und abschließend ist das Hochkomma
[0]{3}[0-9]{7}
Noch etwas genauer wäre hier bezüglich der Aufgabenstellung, wenn man zusätzlich nach dem führenden und schließenden Hochkomma ' eingrenzt
[']{1}[0]{3}[0-9]{7}[']{1}
Also untereinander geschrieben die einzelnen Teile vom Pattern
- [']{1}
- [0]{3}
- [0-9]{7}
- [']{1}
Die Länge 1 muss auch nicht explizit angegeben werden. Also kürzer als das obere Regular Express ist
['][0]{3}[0-9]{7}[']
Ausschnitt aus der Fundstellenliste
Beispiel (?!['][0]{10}['])(['][0]{3}[0-9]{7}['])
Im Projekt wurden die Geschäftspartnernummern mit dem Regular Expression zuverlässig gefunden
['][0]{3}[0-9]{7}[']
Es wurden allerdings auch sehr viele Fundstellen gefunden '0000000000', die für die Geschäftspartnersuche niemals relevant sind und daher ausgeschlossen werden sollten. Daher wurde die obige Regular Expression erweitert.
Dieser Ausschluß erfolgt mit dem Ausdruck. "!" steht für die Negation und "?" dafür, dass man nicht die Negation als Fundstelle ausgewiesen haben möchte.
(?!['][0]{10}['])
Also insgesamt lautet der Reguläre Ausdruck
(?!['][0]{10}['])(['][0]{3}[0-9]{7}['])
Beispiel aus SAP-Hilfe
Prüfung: Gibt es ein Wort, was mit “H” beginnt, dann entweder den Buchstaben “a”, “e” oder “u” hat und dann mit “llo” schließt.
Pattern Text Match H[aeu]llo Hallo X H[aeu]llo Hello X H[aeu]llo Hullo X H[aeu]llo Hollo -
Einzelzeichenmuster
Negation !
- Möchte man eine Negation haben (in ABAP würde man sagen "IS NOT", dann
- Pattern = [!ABC]
- Text = B --> kein Match
- Text = Z --> Match
Boolesche Operatoren
- Eine ODER-Verknüpfung von Pattern wird durch | dargestellt
- Eine UND-Verknüpfung durch die Klammerung "(..)" der einzelnen Teile vom Regulären Ausdruck
Zeichenfolgenmuster
Vereinfachte reguläre Ausdrücke (Klasse CL_ABAP_REGEX)
- Eine einfachere Syntax ist möglich, wenn man sich der Klasse CL_ABAP_REGEX bedient.
- https://help.sap.com/doc/abapdocu_752_index_htm/7.52/de-DE/abenregex_simple.htm