Reguläre Ausdrücke / Regular Expressions

Aus SAP-Wiki
Zur Navigation springenZur Suche springen

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

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}[']


RegularExp1.JPG


Ausschnitt aus der Fundstellenliste

RegularExp2.JPG

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)

Web-Links