Я бы не только проверял строку на наличие вхождения подстроки с помощью регулярных выражений, но также получал бы результат ("45" в моем примере) найденного регулярного выражения.
Я пытался:
DO.
FIND FIRST OCCURRENCE OF REGEX '[$][0-9]+[$]' IN 'safmaoigrevnwnfuwifhd$45$sdffge'
MATCH OFFSET lv_match_offset MATCH LENGTH lv_match_len
SUBMATCHES DATA(s1) DATA(s2) DATA(s3).
IF sy-subrc = 0.
" I expected s2 to contain the value between the "$"
lv_match-value = s2.
" remove found substring from annotation name for next loop
lv_annotation_name = lv_annotation_name+lv_match_offset(lv_match_len).
ELSE.
EXIT.
ENDIF.
ENDDO.
s1, s2 и s3 всегда начальные, но почему? Я думал, что они будут содержать значение найденного регулярного выражения, например, «$», «45», «$». Что я делаю неправильно? Есть ли более элегантный способ, чем мой подход?
Следуя совету Сандры, я изменил код на
FIND ALL OCCURRENCES OF REGEX lv_index_regex IN lv_annotation_name RESULTS lt_matches.
Обратите внимание, что FIND ALL ... MATCHES
не существует, я предположил, что Сандра означает "РЕЗУЛЬТАТЫ". lt_matches
затем содержит itab submatches
, но всегда пусто ....
Спасибо