ABAP
Espressioni regolari
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