Ricerca…


Sostituzione

L'istruzione REPLACE può funzionare direttamente con le espressioni regolari:

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

La variabile lv_test valuterà su The quick bXXwn XXx .

Ricerca

La dichiarazione FIND può funzionare direttamente con le espressioni regolari:

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

Espressioni regolari orientate agli oggetti

Per operazioni di regex più avanzate è meglio usare CL_ABAP_REGEX e le sue classi correlate.

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

Valutazione di espressioni regolari con una funzione di predicato

Le matches funzioni del predicato possono essere utilizzate per valutare le stringhe al volo senza utilizzare dichiarazioni di oggetti.

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.

Ottenere i sottomatch usando le espressioni regolari OO

Utilizzando il metodo GET_SUBMATCH della classe CL_ABAP_MATCHER , possiamo ottenere i dati nei gruppi / sottogruppi.

Obiettivo: ottenere il token a destra della parola chiave "Tipo".

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.

La variabile risultante lv_smatch contiene il valore MARA .



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow