ABAP中正規表示式的簡單使用 --- 轉自老白的部落格 Barry.bai

kevinhaerbin發表於2009-02-23

在一個論壇上面看到有人在問正規表示式的問題,特舉例簡單說明一下。
另外,REPLACE也支援REGEX關鍵字。
最後:只能是ECC6或者更高版本才可以(ABAP supports POSIX regular expressions as of Release 7.00)

REPORT z_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 .
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.
[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/11011430/viewspace-1017738/,如需轉載,請註明出處,否則將追究法律責任。

相關文章