Show TOC Anfang des Inhaltsbereichs

Funktionsdokumentation Reguläre Ausdrücke in Routinen  Dokument im Navigationsbaum lokalisieren

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.

Syntax

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



Ende des Inhaltsbereichs