Zoeken…


Vervangen

De instructie REPLACE kan rechtstreeks met reguliere expressies werken:

DATA(lv_test) = 'The quick brown fox'.
REPLACE ALL OCCURRENCES OF REGEX '\wo' IN lv_test WITH 'XX'.

De variabele lv_test wordt geëvalueerd als The quick bXXwn XXx .

Zoeken

De instructie FIND kan rechtstreeks met reguliere expressies werken:

DATA(lv_test) = 'The quick brown fox'.

FIND REGEX '..ck' IN lv_test.
" sy-subrc == 0

FIND REGEX 'a[sdf]g' IN lv_test.
" sy-subrc == 4

Objectgeoriënteerde reguliere expressies

Voor geavanceerdere regex-operaties is het het beste om CL_ABAP_REGEX en de bijbehorende klassen te gebruiken.

DATA: lv_test  TYPE string,
      lo_regex TYPE REF TO cl_abap_regex.

lv_test = 'The quick brown fox'.
CREATE OBJECT lo_regex
  EXPORTING
    pattern = 'q(...)\w'.

DATA(lo_matcher) = lo_regex->create_matcher( text = lv_test ).
WRITE: / lo_matcher->find_next( ).      " X
WRITE: / lo_matcher->get_submatch( 1 ). " uic
WRITE: / lo_matcher->get_offset( ).     " 4

Reguliere uitdrukkingen evalueren met een predicaatfunctie

Het predikaat functie matches kunnen worden gebruikt om strings on the fly te evalueren zonder gebruik te maken van een object verklaringen.

IF matches( val = 'Not a hex string'
            regex = '[0-9a-f]*' ).
  cl_demo_output=>display( 'This will not display' ).
ELSEIF matches( val = '6c6f7665'
                regex = '[0-9a-f]*' ).
  cl_demo_output=>display( 'This will display' ).
ENDIF.

Submatches verkrijgen met behulp van OO-reguliere expressies

Door de methode GET_SUBMATCH van klasse CL_ABAP_MATCHER , kunnen we de gegevens in de groepen / subgroepen krijgen.

Doel: haal het token rechts van het trefwoord 'Type'.

DATA: lv_pattern TYPE string VALUE 'type\s+(\w+)',
      lv_test TYPE string VALUE 'data lwa type mara'.

CREATE OBJECT ref_regex
  EXPORTING
        pattern     = lv_pattern
        ignore_case = c_true.

ref_regex->create_matcher(
    EXPORTING
        text    = lv_test
    RECEIVING
        matcher = ref_matcher
       ).

ref_matcher->get_submatch(
            EXPORTING
                 index = 0
            RECEIVING
                 submatch = lv_smatch.

De resulterende variabele lv_smatch bevat de waarde MARA .



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow