Sie können reguläre Ausdrücke in Routinen verwenden.
Ein regulärer Ausdruck (Abk. RegExp oder Regex, vom Englischen regular expression) ist ein Muster aus Literal- und Sonderzeichen, das eine Menge von Zeichenfolgen beschreibt. In ABAP können reguläre Ausdrücke in den Anweisungen FIND und REPLACE sowie den Klassen CL_ABAP_REGEX und CL_ABAP_MATCHER verwendet werden. Weitere Informationen finden Sie in der ABAP-Schlüsselwortdokumentation im ABAP Editor. Dort ist sowohl die Syntax regulärer Ausdrücke beschrieben als auch die Möglichkeit, reguläre Ausdrücke zu testen.
Im Folgenden finden Sie einige Coding-Beispiele, wie Sie reguläre Ausdrücke in Routinen verwenden können.
REPORT z_regex.
DATA: l_input TYPE string,
l_regex TYPE string,
l_new TYPE string.
* Example 1: Insert thousand separator
l_input = '12345678'.
l_regex = '([0-9])(?=([0-9]{3})+(?![0-9]))'.
l_new = '$1,'.
WRITE: / 'Before:', l_input. "12345678
REPLACE
ALL OCCURRENCES OF
REGEX l_regex
IN l_input WITH l_new.
WRITE: / 'After:', l_input. "12,345,678
* Example 2: Convert date in US format to German format
l_input = '6/30/2005'.
l_regex = '([01]?[0-9])/([0-3]?[0-9])/'.
l_new = '$2.$1.'.
WRITE: / 'Before:', l_input. "6/30/2005
REPLACE
ALL OCCURRENCES OF
REGEX l_regex
IN l_input WITH l_new.
WRITE: / 'After:', l_input. "30.6.2005
* Example 3: Convert external date in US format to internal date
DATA: matcher TYPE REF TO cl_abap_matcher,
submatch1 TYPE string,
submatch2 TYPE string,
match TYPE c.
l_input = '6/30/2005'.
l_regex = '([01]?)([0-9])/([0-3]?)([0-9])/([0-9]{4})'.
matcher = cl_abap_matcher=>create( pattern = l_regex
text = l_input ).
match = matcher->match( ).
TRY.
CALL METHOD matcher->get_submatch
EXPORTING
index = 1
RECEIVING
submatch = submatch1.
CATCH cx_sy_matcher.
ENDTRY.
TRY.
CALL METHOD matcher->get_submatch
EXPORTING
index = 3
RECEIVING
submatch = submatch2.
CATCH cx_sy_matcher.
ENDTRY.
IF submatch1 IS INITIAL.
IF submatch2 IS INITIAL.
l_new = '$5\0$2\0$4'.
ELSE.
l_new = '$5\0$2$3$4'.
ENDIF.
ELSE.
IF submatch2 IS INITIAL.
l_new = '$5$1$2\0$4'.
ELSE.
l_new = '$5$1$2$3$4'.
ENDIF.
ENDIF.
WRITE: / 'Before:', l_input. "6/30/2005
REPLACE
ALL OCCURRENCES OF
REGEX l_regex
IN l_input WITH l_new.
WRITE: / 'After:', l_input. "20050630