Hallo zusammen,
ich benutze schon länger REGEX, kenne es aus anderen Programmiersprachen, finde die Implementierung unter ABAP 7.50 aber etwas mau.
Es gibt leider kein Lookbehind. Es gibt lediglich ein positives und negatives Lookahead.
positiv (gefolgt von):
Input: blablabla
Regex: blabla(?=bla)
Match:
blablabla
negativ (nicht gefolgt von):
Input: blab blal blaa
Regex: bla(?!b)
Match: blab
blal blaa
Leider kann man nicht wie bei anderen Programmiersprachen das (?=...) vor dem Wort positionieren, das funktioniert dann nicht.
Dadurch ist es nicht möglich, das direkte Match zu verwenden, sondern ich muss mit Subgruppen arbeiten und hier dann die nicht gewünschten mit dem Operator (?:..) ausschließen.
Beispiel: ein beliebiger Barcode enthält die Zeichenfolge '$N:' dann folge ein Nachname und abschließend ein '$'.
Input: hier steht etwas$V:Hans-Herrman$N:Meier$A:21$hier steht etwas
Regex: (?:\$N\:)([a-zA-Z-]+)(?:\$)
Match: hier steht etwas$V:Hans-Herrman
$N:Meier$A:21$hier steht etwas
1. Subgruppe: Meier
Ich würde mir wünschen, dass (?=\$N\:)([a-zA-Z-]+)(?=\$) das direkte Match 'Meier' liefer und ich ohne Subgruppen arbeiten muss. Das scheint aber nicht zu funktionieren (Quelle: Report DEMO_REGEX_TOY).
Kennt jemand Abhilfe?
Gruß
Jani
SAP DOKU Quellen:
Untergruppen mit Registierung,
Vorausschaubedingung