获取REGEX语句FIND的子匹配
我不仅会使用正则表达式检查字符串中是否出现子字符串,还会得到找到的正则表达式的结果(在我的示例中为“45”) 我试过:获取REGEX语句FIND的子匹配,regex,find,abap,Regex,Find,Abap,我不仅会使用正则表达式检查字符串中是否出现子字符串,还会得到找到的正则表达式的结果(在我的示例中为“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(
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.
请注意
查找所有。。。匹配项
不存在,我假设Sandra的意思是“结果”lt_matches
然后包含itabsubmatches
,但它总是空的……语句FIND[FIRST OCCURRENCE OF]REGEX
中的单词submatches
用于直接将匹配的(也称为submatches)提取到变量中
因此,只需在每个圆括号中加上一些括号:
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).
请注意,您的代码将进行无休止的循环,但这是另一个问题(使用
find all executes OF REGEX…RESULTS itab
和内部表中的循环将更容易找到所有匹配项,每行为一个匹配项,每行还包含子匹配项的列表) 语句FIND[FIRST OCCURRENCE OF]REGEX
中的单词SUBMATCHES
用于将匹配的(也称为SUBMATCHES)直接提取到变量中
因此,只需在每个圆括号中加上一些括号:
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).
请注意,您的代码将进行无休止的循环,但这是另一个问题(使用
find all executes OF REGEX…RESULTS itab
和内部表中的循环将更容易找到所有匹配项,每行为一个匹配项,每行还包含子匹配项的列表) 是的,我指的是结果。我的帖子更正了。我在回答中解释了为什么你没有得到任何“子匹配”,因为你没有定义任何子组。啊,对不起,我没有认出括号!谢谢,现在它开始工作了。是的,我是说结果。我的帖子更正了。我在回答中解释了为什么你没有得到任何“子匹配”,因为你没有定义任何子组。啊,对不起,我没有认出括号!谢谢,现在开始工作了。