SAP 正则表达式的使用

it2023-06-05  76

在海量且杂乱的数据中获取指定的字符串时,正则就显得尤为重要,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. 运行结果

最新回复(0)