正则表达式通常与字符串处理函数一块使用,用来匹配字符串,字符串处理函数中输入变量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