壹佰网|ERP100 - 企业信息化知识门户

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1271|回复: 0

[ABAP] ABAP正则表达式的使用

[复制链接]
发表于 2012/8/31 22:57:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。如果您注册时有任何问题请联系客服QQ: 83569622  。

您需要 登录 才可以下载或查看,没有帐号?注册

x
在一个论坛上面看到有人在问正则表达式的问题,特举例简单说明一下。
另外,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.
***使用CLASS的例子:
REPORT  z_barry_test.
PARAMETERS: p_input TYPE string DEFAULT 'IP1:172.16.32.12  IP2:192.168.1.1 ' OBLIGATORY.
DATA: regex   TYPE REF TO cl_abap_regex,
      matcher TYPE REF TO cl_abap_matcher,
      match   TYPE c .
DATA: result_tab TYPE match_result_tab ,
      wa LIKE LINE OF result_tab.
CREATE OBJECT regex
  EXPORTING
    pattern     = '\d+\.\d+\.\d+\.\d+'
    ignore_case = 'X'.
TRY.
    CALL METHOD regex->create_matcher
      EXPORTING
        text    = p_input
*       table   =
      RECEIVING
        matcher = matcher .
  CATCH cx_sy_matcher .
ENDTRY.
TRY.
    CALL METHOD matcher->match "是否完全匹配

      RECEIVING
        success = match.
  CATCH cx_sy_matcher .
ENDTRY.
CALL METHOD matcher->find_all
  RECEIVING
    matches = result_tab.
LOOP AT result_tab INTO wa.
  WRITE / p_input+wa-offset(wa-length).
ENDLOOP.
***SAP给的判断Email地址的例子***
PARAMETERS email TYPE c LENGTH 30 LOWER CASE DEFAULT 'sap@sap.com'.
DATA matcher TYPE REF TO cl_abap_matcher.
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

ABAP正则表达式的使用.docx

14.89 KB, 下载次数: 0, 下载积分: 努力值 -5 点

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|手机版|壹佰网 ERP100 ( 京ICP备19053597号-2 )

Copyright © 2005-2012 北京海之大网络技术有限责任公司 服务器托管由互联互通
手机:13911575376
网站技术点击发送消息给对方83569622   广告&合作 点击发送消息给对方27675401   点击发送消息给对方634043306   咨询及人才点击发送消息给对方138011526

GMT+8, 2025/11/29 12:40 , Processed in 0.020433 second(s), 19 queries , File On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表