正则表达式 古希腊掌管搜索的神 ABAP sql 引入正则 like_regexpr用法
ABAP SQL
XM00124001
XM00124002
XM00124A01
XM00124AV1
XM00224AV1
DATA:lv_str TYPE makt-maktx. DATA:lv_str2 TYPE makt-maktx. lv_str = '1002*123*456'. FIND ALL OCCURRENCES OF '*' IN lv_str MATCH OFFSET DATA(lv_offset) MATCH LENGTH DATA(lv_length) MATCH COUNT DATA(lv_count) . lv_str2 = lv_str+0(lv_offset). "最后一个* 所在的位置 前面的字符串 FIND ALL OCCURRENCES OF '*' IN lv_str RESULTS DATA(lt_tab1). SPLIT lv_str AT '*' INTO TABLE DATA(lt_a). DATA: proj_year TYPE string VALUE '1234567'. DATA: max_matnr TYPE matnr. *^proj_year\d{3}$ DATA:lv_pcre TYPE char30. proj_year = '00124'. *proj_year = 'XM00124'. lv_pcre = '^' && proj_year && '\d{3}$'. BREAK-POINT. SELECT like_regexpr( pcre = @lv_pcre,value = zracctf,case_sensitive = @abap_true ) AS like_regexpr, replace_regexpr( pcre = @lv_pcre,value = zracctf,with = 'bb' ) AS replace_regexpr, replace_regexpr( pcre = '\CA', value = 'aAaA', with = 'B' ) AS replace_regex2, zitemno, zracctf, zfikt018~* FROM zfikt018 INTO TABLE @DATA(lt_zfikt018_now). SELECT zfikt018~*, like_regexpr( pcre = @lv_pcre,value = zracctf,case_sensitive = @abap_true ) AS max_km, replace_regexpr( pcre = @lv_pcre,value = zracctf,with = 'bb' ) AS replace_regexpr, replace_regexpr( pcre = '\CA', value = 'aAaA', with = 'B' ) AS replace_regex2, zitemno, zracctf FROM zfikt018 WHERE like_regexpr( pcre = @lv_pcre,value = zracctf,case_sensitive = @abap_true ) = '1' INTO TABLE @DATA(lt_zfikt018). * WHERE LIKE_REGEXPR( pcre = CONCAT( proj_year, '\d{3}' ), case_sensitive = abap_true ) as * ORDER BY matnr desc * limit 1. max_matnr = lines( lt_zfikt018 ) . SELECT MAX( zracctf ) AS zracctf FROM zfikt018 WHERE like_regexpr( pcre = @lv_pcre,value = zracctf ) = '1' INTO @DATA(ls_zfikt018). SELECT zfikt018~* * MAX( zracctf ) as zracctf FROM zfikt018 WHERE replace_regexpr( pcre = @lv_pcre,value = zracctf,with = 'bb' ) = 'bb' INTO TABLE @DATA(lt_zfikt018_rep).
正则表达式 ^XM00124\d{3}$
的含义如下:
^
:表示匹配字符串的开始。XM00124
:表示匹配的字符串必须以 "XM00124" 开头。\d
:表示匹配任意一个数字(0-9)。{3}
:表示前面的\d
数字匹配规则需要重复3次。$
:表示匹配字符串的结束。
综合起来,这个正则表达式匹配的是一个以 "XM00124" 开头,后面跟着任意3个数字,并且以这三个数字结尾的字符串。例如,它可以匹配 "XM0012400"、"XM0012401" 等字符串。
案例2
要匹配一个以任意数量的前导零开始,中间是 "00124",后面是三位数字结尾的字符串,可以使用以下正则表达式:
^0*00124\d{3}$
这里的各个部分含义如下:
^
:表示匹配字符串的开始。0*
:表示匹配0个或多个零(*
表示前面的字符0
可以出现0次或多次)。00124
:表示匹配的字符串中必须包含 "00124" 这个序列。\d{3}
:表示匹配任意三个数字(\d
表示数字,{3}
表示重复3次)。$
:表示匹配字符串的结束。
这个正则表达式将会匹配任何以 "00124" 开头,后面跟着三位数字,且前面可以有任意数量的前导零的字符串。例如,它将匹配 "00000124401" 和 "0000000124501"。