ABAP之正则表达式


        正则表达式通常与字符串处理函数一块使用,用来匹配字符串,字符串处理函数中输入变regex就代表正则式。

例如,Find all ocurance of regex

DATA: moff TYPE i,
       mlen TYPE i,
       s1   TYPE string,
       s2   TYPE string,
       s3   TYPE string,
       s4   TYPE string.
DATA: result_tab TYPE MATCH_RESULT_TAB.
FIND ALL OCCURRENCES OF REGEX `((\w+)\W+\2\W+(\w+)\W+\3)`
IN `Hey hey, my my, Rock and roll can never die Hey hey, my my`
IGNORING CASE
MATCH OFFSET moff  "返回最后一次匹配的串的首字符的位置,从0开始
MATCH LENGTH mlen  "返回最后一次匹配的串的长度
RESULT result_tab  "result_tab 接收所有匹配的串,result_wa只接受最后一次
SUBMATCHES s1 s2 s3 s4."根据正则式分组从外到内,从左到右的括号顺序依次存储到s1 s2…中
WRITE: /  s1, / s2,/ s3 ,/ s4,/ moff ,/ mlen."s3 s4会被忽略

例子中,正则式 `((\w+)\W+\2\W+(\w+)\W+\3)`

            \w 代表  单个任意数字、字母、下划线字符

            \W 代表  单个非数字、字母、下划线字符

             +  代表  紧前字符出现一次或者多次

          ()代表  捕获组,每对括号代表一组,按照括号从外到内从左到右排序1 2 3...

                              例子中 ()1组  () 2组  ()3组

            \2  代表   引用第2组匹配到的字符,2是按照捕获组分组的组号。

所以( )  2组匹配到 Hey  \2 代表Hey

           ( )  3组匹配到 my    \3  代表 my

         ()1组`((\w+)\W+\2\W+(\w+)\W+\3)` 匹配的是Hey hey, my my

 1. 常用的包含regex的字符串处理函数如下:

count( val = TEXT {sub = substring}|{regex = regex} )
*匹配指定字符串substring或正则式regex出现的子串次数,返回的类型为i整型类型

contains( val = TEXT REGEX = REGEX)
*是否包含。返回布尔值,注:只能用在if、While等条件表达式中

matches( val = TEXT REGEX = REGEX)
*regex表达式是否与text完全匹配,返回布尔值。

match( val = TEXT REGEX = REGEX occ = occ)
*返回的为匹配到的字符串。注:每次只匹配一个。
*occ:表示需匹配到第几次出现的子串。如果为正,则从头往后开始计算,如果为负,则从尾部向前计算

find( val = TEXT {sub = substring}|{regex = regex}[occ = occ] )
*查找substring或者匹配regex的子串的位置。如果未找到,则返回 -1,返回的为offset,所以从0开始

FIND ALL OCCURRENCES OF REGEX regex IN  dobj
  [MATCH COUNT  mcnt]  " 成功匹配的次数
  { {[MATCH OFFSET moff][MATCH LENGTH mlen]}
*最后一次整体匹配到的串的起始位置与长度
  | [RESULTS result_tab|result_wa] } 
*result_tab接收所有匹配结果,result_wa只能接收最后一次匹配结果
  [SUBMATCHES s1 s2 ...].
replace( val = TEXT  REGEX = REGEX  WITH = NEW)"使用new替换指定的子符串,返回String类型

REPLACE ALL OCCURRENCES OF REGEX regex IN  dobj WITH new

2. ABAP常用的正则表达式如下:

(22条消息) ABAP-正则表达式(详解)_Nathan_Sun的博客-CSDN博客_abap 正则表达式

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值