ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ABAP-正则表达式的运用

2022-06-28 11:03:45  阅读:157  来源: 互联网

标签:字符 匹配 wa 正则表达式 submatches ABAP result 运用


在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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有