正则表达式 古希腊掌管搜索的神 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"。

 

 

posted @ 2025-01-03 11:44  Lan_dev  阅读(76)  评论(0)    收藏  举报