ABAP中正则表达式的简单使用
来源:互联网 发布:淘宝迅雷会员充值 编辑:程序博客网 时间:2024/04/29 16:37
转自老白的blog, 正好有个需求用到正则,转一下:
原贴地址: http://blog.chinaunix.net/u1/40527/showart.php?id=1336138
关于正则表达式的问题,特举例简单说明一下。
另外,REPLACE也支持REGEX关键字。
最后:只能是ECC6或者更高版本才可以(ABAP supports POSIX regular expressions as of Release 7.00)
REPORT z_barry_test.
DATA: str TYPE string ,
result_tab TYPE match_result_tab ,
wa LIKE LINE OF result_tab.
*找出STRING里面的双字节字符
str = 'abc我啊adfsf们'.
FIND ALL OCCURRENCES OF REGEX '[^/x00-/xff]*' IN str RESULTS result_tab.
LOOP AT result_tab INTO wa.
WRITE / str+wa-offset(wa-length).
ENDLOOP.
*找出STRING里面的单字节字符
str = 'abc我啊adfsf们'.
FIND ALL OCCURRENCES OF REGEX '[/x00-/xff]*' IN str RESULTS result_tab.
WRITE / '-----'.
LOOP AT result_tab INTO wa.
WRITE / str+wa-offset(wa-length).
ENDLOOP.
*找出STRING里面的IP地址
str = 'IP1:172.16.32.12 IP2:192.168.1.1 '.
FIND ALL OCCURRENCES OF REGEX '/d+/./d+/./d+/./d+' IN str RESULTS result_tab.
WRITE / '-----'.
LOOP AT result_tab INTO wa.
WRITE / str+wa-offset(wa-length).
ENDLOOP.
*找出STRING里面的***-********格式的电话号码
str = 'IP1:172.16.32.12 021-12345678 '.
FIND ALL OCCURRENCES OF REGEX '/d{3}-/d{8}|/d{4}-/d{7}' IN str RESULTS result_tab.
WRITE / '-----'.
LOOP AT result_tab INTO wa.
WRITE / str+wa-offset(wa-length).
ENDLOOP.
*找出STRING里面的15/18位身份证号码
str = 'IP1:172.16.32.12 3722198003041234 '.
FIND ALL OCCURRENCES OF REGEX '/d{15}|/d{18}' IN str RESULTS result_tab.
WRITE / '-----'.
LOOP AT result_tab INTO wa.
WRITE / str+wa-offset(wa-length).
ENDLOOP.
matcher TYPE REF TO cl_abap_matcher,
match TYPE c .
wa LIKE LINE OF result_tab.
EXPORTING
pattern = '/d+/./d+/./d+/./d+'
ignore_case = 'X'.
CALL METHOD regex->create_matcher
EXPORTING
text = p_input
* table =
RECEIVING
matcher = matcher .
CATCH cx_sy_matcher .
ENDTRY.
CALL METHOD matcher->match "是否完全匹配
RECEIVING
success = match.
CATCH cx_sy_matcher .
ENDTRY.
RECEIVING
matches = result_tab.
LOOP AT result_tab INTO wa.
WRITE / p_input+wa-offset(wa-length).
ENDLOOP.
matcher = cl_abap_matcher=>create( pattern = '/w+(/./w+)*@(/w+/.)+(/w{2,4})'
ignore_case = 'X'
text = email ).
IF matcher->match( ) IS INITIAL.
MESSAGE 'Wrong Format' TYPE 'I'.
ELSE.
MESSAGE 'Format OK' TYPE 'I'.
ENDIF.
注:ECC6下有个专门测试正则表达式的工具程序:DEMO_REGEX_TOY
======以下本人跟据上文测试=====================================
需求,验证以两个字母开头(不分大小写),以数字02结尾的字符串, 代码:
SPAN {font-family: "Yahei Mono";font-size: 10pt;color: #000000;background: #FFFFFF;}.L0S52 {color: #0000FF;}
DATA: regex TYPE REF TO cl_abap_regex,
matcher TYPE REF TO cl_abap_matcher,
match TYPE c .
SPAN {font-family: "Yahei Mono";font-size: 10pt;color: #000000;background: #FFFFFF;}.L0S31 {font-style: italic;color: #808080;}.L0S33 {color: #4DA619;}.L0S52 {color: #0000FF;}
CREATE OBJECT regex
EXPORTING
pattern = '^[a-zA-Z]{2}02'
ignore_case = 'X'.
TRY.
CALL METHOD regex->create_matcher
EXPORTING
text = ps_werks-low
RECEIVING
matcher = matcher.
TRY.
CALL METHOD matcher->match "是否完全匹配
RECEIVING
success = match.
CATCH cx_sy_matcher .
gv_msg = 'ERROR'.
ENDTRY.
CATCH cx_sy_matcher .
gv_msg = 'ERROR'.
ENDTRY.
IF match NE 'X'.
gv_msg = 'ERROR'. ELSE.
gv_msg = 'OK'.
ENDIF.
- ABAP中正则表达式的简单使用
- ABAP中正则表达式的简单使用
- ABAP中正则表达式的简单使用
- ABAP中正则表达式的简单使用方法
- ABAP中正则表达式的应用
- Java中正则表达式的简单使用
- 正则表达式的简单使用
- 正则表达式的简单使用
- 正则表达式的简单使用
- 正则表达式的简单使用
- Java中怎么简单的使用正则表达式?
- C#中正则表达式的简单使用介绍
- Android Studio中全局替换简单的使用正则表达式
- 正则表达式---简单使用
- 正则表达式简单使用
- JAVA中正则表达式的简单应用
- MySQL中正则表达式的简单用法
- mysql中正则表达式的简单用法
- IT职场求生法则
- SQLServer附加数据库时提示“对sysindexes运行DBCC CHECKTABLE”
- 对方网络非正常断开检测方法
- 软件数字签名一点基础知识整理
- c++编译器设置 详解
- ABAP中正则表达式的简单使用
- Unable to Open User Login File
- 解读Tapestry5.1——请求调用链
- asp.net(c#)数据类型格式转换大全
- 深入了解字符集和编码--正在写一个阅读器,收集资料
- Tapestry5 事件分派机制
- BREW™ SDK入门篇(一)
- 关于java的http协议文件上传实用例题一
- 苹果正在开发Flash的替代品Gianduia