在海量且杂乱的数据中获取指定的字符串时,正则就显得尤为重要,SAP也支持正则查找
Tips1.SAP正则匹配测试DemoTips2. 支持正则语法的KeywordTips3. 支持正则语法的类Tips4. 正则用法Tips5. 运行结果
Tips1.SAP正则匹配测试Demo
SAP自带一个程式Regex Toy可以帮助我们测试正则语法SE38:DEMO_REGEX_TOY
Tips2. 支持正则语法的Keyword
FINDREPLACE
Tips3. 支持正则语法的类
Tips4. 正则用法
正则语法非常重要,需要事先测试正则匹配返回的一个Index Table,取值需要用LV_STRING+n(n)的方式
DATA: LV_STRING TYPE STRING VALUE '5678931,7893014,12789045,13456782,1356783'.
DATA: LT_RESULT TYPE TABLE OF MATCH_RESULT,
WA_RESULT TYPE MATCH_RESULT.
DATA: LV_MATCH TYPE C.
*-------Keyword
FIND ALL OCCURRENCES OF REGEX '(?:,{0,1})(\d{7,8})(?:,{0,1})' IN LV_STRING RESULTS LT_RESULT.
*读取捕获值
LOOP AT LT_RESULT INTO WA_RESULT.
WRITE:/ LV_STRING+WA_RESULT-OFFSET(WA_RESULT-LENGTH).
ENDLOOP.
ULINE.
*读取捕获的分组值
LOOP AT LT_RESULT INTO WA_RESULT.
DATA(LT_SUBMATCHES) = WA_RESULT-SUBMATCHES.
LOOP AT LT_SUBMATCHES INTO DATA(WA_SUBMATCHES).
WRITE:/ LV_STRING+WA_SUBMATCHES-OFFSET(WA_SUBMATCHES-LENGTH).
ENDLOOP.
ENDLOOP.
*-------Class
DATA: OREF_REGEX TYPE REF TO CL_ABAP_REGEX,
OREF_MATCHER TYPE REF TO CL_ABAP_MATCHER.
CLEAR: LT_RESULT,WA_RESULT.
CREATE OBJECT OREF_REGEX
EXPORTING
PATTERN = '(\d{7,8})'
IGNORE_CASE = 'X'.
*Class CL_ABAP_REGEX
TRY.
CALL METHOD OREF_REGEX->CREATE_MATCHER
EXPORTING
TEXT = LV_STRING
* TABLE =
RECEIVING
MATCHER = OREF_MATCHER.
CATCH CX_SY_MATCHER .
ENDTRY.
LV_MATCH = 'X'.
*Class CL_ABAP_MATCHER
TRY.
CALL METHOD OREF_MATCHER->MATCH "Use Regular Expression for Remaininn Character Set
RECEIVING
SUCCESS = LV_MATCH.
CATCH CX_SY_MATCHER .
ENDTRY.
CALL METHOD OREF_MATCHER->FIND_ALL
RECEIVING
MATCHES = LT_RESULT.
ULINE.
LOOP AT LT_RESULT INTO WA_RESULT.
WRITE:/ LV_STRING+WA_RESULT-OFFSET(WA_RESULT-LENGTH).
ENDLOOP.
Tips5. 运行结果