Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取REGEX语句FIND的子匹配_Regex_Find_Abap - Fatal编程技术网

获取REGEX语句FIND的子匹配

获取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(

我不仅会使用正则表达式检查字符串中是否出现子字符串,还会得到找到的正则表达式的结果(在我的示例中为“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. 

请注意
查找所有。。。匹配项
不存在,我假设Sandra的意思是“结果”
lt_matches
然后包含itab
submatches
,但它总是空的……

语句
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
和内部表中的循环将更容易找到所有匹配项,每行为一个匹配项,每行还包含子匹配项的列表)

是的,我指的是结果。我的帖子更正了。我在回答中解释了为什么你没有得到任何“子匹配”,因为你没有定义任何子组。啊,对不起,我没有认出括号!谢谢,现在它开始工作了。是的,我是说结果。我的帖子更正了。我在回答中解释了为什么你没有得到任何“子匹配”,因为你没有定义任何子组。啊,对不起,我没有认出括号!谢谢,现在开始工作了。