Show TOC

Reguläre Ausdrücke in RoutinenLocate this document in the navigation structure

Verwendung

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.

Beispiel

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