其他分享
首页 > 其他分享> > ABAP-正则表达式的运用

ABAP-正则表达式的运用

作者:互联网

在SAP中可以运行DEMO_REGEX和DEMO_REGEX_TOY程序来验证正则表达式

也可以通过regexr-cn.com和regex101.com这两个网址来验证正则表达式

在ABAP中定义了两个类来实现相应功能,分别是CL_ABAP_REGEX 和CL_ABAP_MATCHER

正则表达式的说明:

表达式 说明
a* a出现零次或多次
a+ a出现一次或多次
a? a出现零次或一次
a{6} a出现六次
a{2,6} a出现两次到六次
a{2,} a出现两次或以上
a|b 匹配a或b
[abc] 匹配a或b或c
[a-f] 匹配a到f的英文字母
[a-zA-Z0-9] 匹配小写a-z、大写A-Z和0-9的数字
[^0-9] 匹配不是0到9的数字
\d 匹配数字字符
\D 匹配非数字字符
\w 匹配单词字符(英文、数字、下划线)
\W 匹配非单词字符
\s 匹配空白字符(包含换行符和Tab)
\S 匹配非空白字符
. 匹配任意字符(换行符除外)
\b 匹配字符边界
\B 匹配非字符边界
\ 转义字符
^ 匹配行首
$ 匹配行尾
.+ 贪婪匹配(匹配最长的)
.+? 懒惰匹配(匹配最短的)
() 1.括号中的表达式可以作为整体被修饰 2.在取匹配结果时可以将括号的数据单独取出
(?:) 匹配但是不捕获
(?=) 正向预搜索,判断当前位置右侧是否能匹配指定表达式
(?!) 正向预搜索否定,判断当前位置右侧是否不能够匹配指定表达式
(?<=) 反向预搜索,判断当前位置左侧是否能够匹配指定表达式
(?<!) 反向预搜索否定,判断当前位置左侧是否不能够匹配指定表达式
[:alnum:] 匹配任何一个字母或数字(A-Z、a-z、0-9)
[:alpha:] 匹配任何一个字母(A-Z、a-z)
[:cntrl:] 匹配任何一个控制字符(\x00-\x1F、\x7F)
[:digit:] 匹配任何一个数字(0-9)
[:xdigit:] 匹配任何一个16进制数
[:space:] 匹配任何一个空白字符(\x09-\x0D、\x20)
[:graph:] 匹配任何一个可显示的ASCII字符,不包含空格
[:lower:] 匹配任何一个小写字母(a-z)
[:upper:] 匹配任何一个大写字母(A-Z)
[:punct:] 匹配任何一个标点符号
[:blank:] 空格或者制表符(\x20、\x09)

在程序中可以运用正则表达式来验证,查找和替换

1 *正则表达式验证
2 IF cl_abap_matcher=>matches(
3     pattern = '^(-?[1-9]\d*(\.\d*[1-9])?)|(-?0\.\d*[1-9])$'
4     text = '1.01a' ) = abap_true.
5   WRITE '数字'.
6 ELSE.
7   WRITE '非数字'.
8 ENDIF.
 1 *正则表达式查找
 2 DATA: lv_string TYPE string VALUE '广东省珠海市香洲区中山路'.
 3 
 4 DATA: lt_result TYPE TABLE OF match_result,
 5       wa_result TYPE match_result.
 6 
 7 FIND ALL OCCURRENCES OF PCRE '(.+?[省])?(.+?[市])?(.+?[区])?(.*)?' IN  lv_string IGNORING CASE RESULTS lt_result.
 8 
 9 LOOP AT lt_result INTO wa_result WHERE offset >= 0 .
10   WRITE:/ lv_string+wa_result-offset(wa_result-length).
11 ENDLOOP.
12 
13 ULINE.
14 *读取捕获的分组值
15 LOOP AT lt_result INTO wa_result.
16   DATA(lt_submatches) = wa_result-submatches.
17   LOOP AT lt_submatches INTO DATA(wa_submatches) WHERE offset >= 0.
18     WRITE:/ lv_string+wa_submatches-offset(wa_submatches-length).
19   ENDLOOP.
20 ENDLOOP.
1 *正则表达式替换
2 DATA text TYPE string VALUE '-hubinshishuibuzhidao-'.
3 REPLACE ALL OCCURRENCES OF PCRE 'sh.?i' IN text WITH 'FFF'.
4 WRITE:/ text.

标签:字符,匹配,wa,正则表达式,submatches,ABAP,result,运用
来源: https://www.cnblogs.com/TigerMan/p/16418346.html