ABAP中正则表达式的简单使用方法 (转老白BLOG)


在一个论坛上面看到有人在问正则表达式的问题,特举例简单说明一下。
另外,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. 优质内容筛选与推荐>>
1、JSP彩色验证码
2、小程序绑定手机号,头像昵称
3、jsp 分页实现 参考http://jihao.iteye.com/blog/253280
4、静默是一种深刻的语言
5、Spring学习笔记之整合struts


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号