Variante 1 (cl_abap_matcher)
* mehrere Submatches in einer vorgegebenen Ordnerstruktur finden
* Unterordner mit '/<Zahlen>'
DATA(matcher) = cl_abap_matcher=>create( pattern = '/([0-9]{1,5})'
text = '/category/12345/item/12'
ignore_case = abap_true ).
WHILE abap_true = matcher->find_next( ).
WRITE: / matcher->get_submatch( 1 ).
ENDWHILE.
Variante 2 (cl_abap_matcher)
* mehrere Submatches in einer vorgegebenen Ordnerstruktur finden
* Ordnerstruktur mit '/category/<Zahlen>/item/<Zahlen>'
DATA(matcher) = cl_abap_matcher=>create( pattern = '^/category/([0-9]{1,5})/item/([0-9]{1,2})$'
text = '/category/12345/item/12'
ignore_case = abap_true ).
IF abap_true = matcher->match( ).
* erstes Match
WRITE: / matcher->get_submatch( 1 ).
* zweites Match
WRITE: / matcher->get_submatch( 2 ).
ENDIF.
Variante 3 (FIND ALL OCCURRENCES OF REGEX)
* Ordnerstruktur mit '/category/<Zahlen>/item/<Zahlen>'
DATA(lv_regex) = '^/category/([0-9]{1,5})/item/([0-9]{1,2})$'.
DATA(lv_text) = '/category/12345/item/12'.
* Alle Auftreten des Suchmusters
FIND ALL OCCURRENCES OF REGEX lv_regex IN lv_text RESULTS DATA(it_results).
* Ausgabe
LOOP AT it_results ASSIGNING FIELD-SYMBOL(<r>).
LOOP AT <r>-submatches ASSIGNING FIELD-SYMBOL(<s>).
WRITE: / substring( val = lv_text off = <s>-offset len = <s>-length ).
ENDLOOP.
ENDLOOP.
Variante 4 (FIND REGEX)
DATA(lv_regex) = '^/category/([0-9]{1,5})/item/([0-9]{1,2})$'.
DATA(lv_text) = '/category/12345/item/12'.
* Erstes Auftreten des Suchmusters
FIND REGEX lv_regex IN lv_text RESULTS DATA(lv_results).
LOOP AT lv_results-submatches ASSIGNING FIELD-SYMBOL(<s>).
WRITE: / substring( val = lv_text off = <s>-offset len = <s>-length ).
ENDLOOP.