**老白的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
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可以理解為全匹配,在寫正則時,需要與待匹配字串格式保持一致...