ABAP中正規表示式的簡單使用

2021-05-22 12:18:04 字數 4116 閱讀 5638

**老白的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-/d|/d-/d' 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|/d' 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

'[email protected]' .

data matcher type ref to cl_abap_matcher.

matcher = cl_abap_matcher=>create( pattern = '/w+(/./w+)*@(/w+/.)+(/w)'

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

.l0s52

data:

regex   type 

ref 

to cl_abap_regex,

matcher type 

ref 

to cl_abap_matcher,

match   type c .

span

.l0s31

.l0s33

.l0s52

create 

object regex

exporting

pattern     = '^[a-za-z]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.

PLSQL中正規表示式使用

原 2018年10月08日 14 48 11 寫 也要符合基本法 閱讀數 2008 更多分類專欄 oracle學習筆記 regexp like 返回指定字串是否符合給定的正規表示式 regexp substr 返回在指定字串中截取出的符合給定正規表示式的子串 regexp instr 返回在指定字串...

python中正規表示式使用

1 正規表示式的常用操作符 操作符說明例項 表示任何單個字元 字符集,對單個字元給出取值範圍 abc 表示a b c,a z 表示a到z單個字元 非字符集,對單個字元給出排除範圍 abc 表示非a或b或c的單個字元 前乙個字元0次或無限次擴充套件 abc 表示ab abc abcc abccc等 前...

C 中正規表示式的使用(簡單總結)

正規表示式,很方便,那麼該怎麼學習呢?知乎中有這樣一篇回答應該怎麼練習使用正規表示式?很有意思。其中有三個回答,我覺得很有用處。正則入門 正則王國奇遇記 深入正則 乙個大佬的部落格 下面是本人對c 中的正規表示式的理解。regex match可以理解為全匹配,在寫正則時,需要與待匹配字串格式保持一致...