获取 FIND OF REGEX 语句的子匹配项
Get submatches of FIND OF REGEX statement
我不仅会使用正则表达式检查字符串中是否出现任何子字符串,还会得到找到的正则表达式的结果(在我的示例中为“45”)。
我试过:
DO.
FIND FIRST OCCURRENCE OF REGEX '[$][0-9]+[$]' IN 'safmaoigrevnwnfuwifhd$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
不存在,我假设 Sandra 的意思是 "RESULTS"。 lt_matches
然后包含 itab submatches
但它总是空的....
语句FIND [FIRST OCCURRENCE OF] REGEX
中的单词SUBMATCHES
用于直接将匹配的registered subgroups (...)
(A.K.A.子匹配)提取到变量中。
因此,只需在它们中的每一个周围加上一些括号:
FIND FIRST OCCURRENCE OF REGEX '([$])([0-9]+)([$])'
IN 'safmaoigrevnwnfuwifhd$sdffge'
MATCH OFFSET lv_match_offset
MATCH LENGTH lv_match_len
SUBMATCHES DATA(s1) DATA(s2) DATA(s3).
请注意,您的代码将执行无限循环,但这是另一个问题(使用 FIND ALL OCCURRENCES OF REGEX ... RESULTS itab
一次查找所有匹配项并在内部 table 处循环会更容易,每行是一个匹配项,每一行还包含子匹配项的列表)。
我不仅会使用正则表达式检查字符串中是否出现任何子字符串,还会得到找到的正则表达式的结果(在我的示例中为“45”)。
我试过:
DO.
FIND FIRST OCCURRENCE OF REGEX '[$][0-9]+[$]' IN 'safmaoigrevnwnfuwifhd$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
不存在,我假设 Sandra 的意思是 "RESULTS"。 lt_matches
然后包含 itab submatches
但它总是空的....
语句FIND [FIRST OCCURRENCE OF] REGEX
中的单词SUBMATCHES
用于直接将匹配的registered subgroups (...)
(A.K.A.子匹配)提取到变量中。
因此,只需在它们中的每一个周围加上一些括号:
FIND FIRST OCCURRENCE OF REGEX '([$])([0-9]+)([$])'
IN 'safmaoigrevnwnfuwifhd$sdffge'
MATCH OFFSET lv_match_offset
MATCH LENGTH lv_match_len
SUBMATCHES DATA(s1) DATA(s2) DATA(s3).
请注意,您的代码将执行无限循环,但这是另一个问题(使用 FIND ALL OCCURRENCES OF REGEX ... RESULTS itab
一次查找所有匹配项并在内部 table 处循环会更容易,每行是一个匹配项,每一行还包含子匹配项的列表)。