转自:https://www.cnblogs.com/jiangzhengjun/p/4292994.html#_Toc411766043

REPLACE
REPLACE [{FIRST OCCURRENCE}|{ALL OCCURRENCES} OF] {[SUBSTRING] sub_string} | {REGEX regex}
IN [SECTION [OFFSET off] [LENGTH len] OF] dobj WITH new
[IN {BYTE|CHARACTER} MODE]
[{RESPECTING|IGNORING} CASE]
[REPLACEMENT COUNT rcnt]
{ {[REPLACEMENT OFFSET roff]
[REPLACEMENT LENGTH rlen]}
| [RESULTS result_tab|result_wa] }. 语法与FIND相似。 如果new尾部空格需要保留,则要使用String类型的new,其他固定长度类型的new字符,会忽略掉尾部空格。 {FIRST OCCURRENCE}|{ALL OCCURRENCES} OF FIRST OCCURRENCE或者未指定时,只替换第一次匹配的;ALL OCCURRENCES则替换所有子匹配串 {[SUBSTRING] sub_string} | {REGEX regex} [SUBSTRING] sub_string:以固定的字符串为匹配模式进行搜索并替换,与前面替换指定的字符串的REPLACE是一样的。 FIRST OCCURRENCE或者未指定时,如果sub_string是空String类型的字符串或者内容为空格的固定长度类型(c, d, n, or t)的字符串时,sub_string将会被看作是empty 类型的字符串,并且查找替换的位置将定位到dobj的首字符前,并且将new插入到dobj最前面。但如果sub_string是空字符串(包括字符类型字符串类型),使用ALL OCCURRENCES选项,则会抛异常。 sub_string为固定长度类型的字符串时,尾部空格将被忽略(这与老式的REPLACE规则不同),如果不想忽略尾部空格,则使用String类型的sub_string。 REGEX regex:使用正则表达式进行匹配替换。 regex不允许为空String类型的字符串或者内容只有空格的固定长度类型(c, d, n, or t)的字符串。 DATA text TYPE string VALUE '-uu-'.
"U*表示0个或多个U,当为0个时,字符间的空隙就相匹配"U*与UU相匹配,替换的结果为第三个 x
REPLACE ALL OCCURRENCES OF REGEX 'u*' IN text WITH 'x'.
WRITE:/ text. x-xx-x IN [SECTION [OFFSET off] [LENGTH len] OF] dobj 如果未加上SECTION选项,将对整个dobj字符串进行匹配替换操作。如果指定了SECTION选项,则OFFSET与LENGTH必须选择一个。如果指定如果指定了OFFSET,但未指定LENGTH时,替换的区域从OFFSET到dobj的最后;如果指定了LENGTH,但未指定OFFSET时,OFFSET将隐含为0。OFFSET与LENGTH需要大于或等于0,通过OFFSET与LENGTH定位到的子字符串段必须要位于dobj里。该选项与前面替换某个区间上的字符串的REPLACE是一样的,与FIND也相同。 [{RESPECTING|IGNORING} CASE] 区分与忽略大小写,对在 IN CHARACTER MODE 模式下使用,默认区别大小写 [REPLACEMENT COUNT rcnt] 成功替换的次数,如果没有发生替换,则为0 注:如果dobj为固定长度类型的字符串时,则发生替换的次数 rcnt 可能少于本应该查找到的次数。 [REPLACEMENT OFFSET roff] 最后一次替换发生在 dobj 中的起始位置,如果没有发生替换,则保留的是以前的值。 [REPLACEMENT LENGTH rlen] 最的一次dobj替换完成后替换结果段的长度(注:不是指查到的sub_string长度的,而是指定成功替换后被插入部分的长度,这与FIND函数是不一样的,这里一般等于 new 的长度),如果没有发生替换,则保留的是以前的值。 注:如果dobj为固定长度类型的字符串时,rlen可能小于 new 的长度。 关于rcnt变少、rlen变小的示例: DATA: text() VALUE 'aaacccccc'.
DATA: roff TYPE i, rlen TYPE i,rcnt TYPE i. REPLACE ALL OCCURRENCES OF 'ccc' IN text WITH 'ddd'
REPLACEMENT COUNT rcnt
REPLACEMENT OFFSET roff
REPLACEMENT LENGTH rlen. "ddd: 2 6 3 替换值 new 未被截断且后面还有未进行替换处理的字符串(ccc),继续查找与替换
"dddd: 2 7 2 替换值 new 未被截断且后面还有未进行替换处理的字符串(cc),继续查找与替换
"ddddd: 2 8 1 替换值 new 未被截断且后面还有未进行替换处理的字符串(c),继续查找与替换
"dddddd: 1 3 6 替换值 new 未被截断但后面不再有其他字符串,所以不再查找与替换(替换次数1小于本应该查找到的次数2,因为在经过第1次替换后,被替代后面的所有字符串都会被截断,下面也是一样道理)
"ddddddd: 1 3 6 替换值 new 被截断,所以不再查找与替换
WRITE: / rcnt, / roff, / rlen. [RESULTS result_tab|result_wa] 如果发生了替换操作,则替换的起始位置、匹配到的字符串长度都会存储到一个行结构为result_wa的result_tab内表中,与FIND中的RESULTS result_tab选项意思相当,只是result_tab and result_wa的类型为REPL_RESULT_TAB or REPL_RESULT,并且REPL_RESULT里没有内嵌SUBMATCHES: image071[] 替换指定位置
DATA: text1 TYPE string,
text2 TYPE c LENGTH ,
off TYPE i,
len TYPE i.
text1 = text2 = 'I know you know'.
"先查找位置:查找第一次匹配位置
FIND 'know' IN text1 MATCH OFFSET off
MATCH LENGTH len.
"再根据指定位置替换
REPLACE SECTION OFFSET off LENGTH len OF:
text1 WITH 'should know that',
text2 WITH 'should know that'.
"text2替换后被截断
WRITE: / text1,/ text2 , sy-subrc. I should know that you know I should know that DATA: text1 TYPE string,
cnt TYPE i,
off TYPE i,
len TYPE i.
text1 = 'I know you know'.
REPLACE ALL OCCURRENCES OF 'know' IN
SECTION OFFSET LENGTH of"在11~14索引范围内匹配替换
text1 WITH 'should know that'
REPLACEMENT COUNT cnt"发生的替换次数
REPLACEMENT OFFSET off"最后一次发生替换的位置
REPLACEMENT LENGTH len.
WRITE: / text1, cnt, off,len. I know you should know that

REPLACE 语法的更多相关文章

  1. 基本MarkDown语法

    引言 字符串作为一种常见的数据类型,在日常中我们面临各式各样的字符串处理问题,那么,这就要求我们必须掌握一些常用的字符串处理函数.本文尽量囊括常用的字符串处理函数,此文也作为个人的小总结. Pytho ...

  2. MySQL中的replace语句

    一.背景 当使用replace语句更新access_apps表时,原有的mark列.remark列的信息丢失. CREATE TABLE `access_apps` (   `base` varcha ...

  3. sql语句语法

    13.1. 数据定义语句 . ALTER DATABASE语法 . ALTER TABLE语法 . CREATE DATABASE语法 . CREATE INDEX语法 . CREATE TABLE语 ...

  4. 字符串方法 split() & replace()

    split() 语法:stringObject.split(separator) 功能:把一个字符串分割成字符串数组 返回值:Array 说明:separator 是必须的,分隔符. var str= ...

  5. 有关正则表达式的Js方法(replace)

    整理一下最近常用的几个有关正则的js方法 replace 语法:stringObject.replace(regexp/substr,replacement) 用法1 const str='abc13 ...

  6. Mysql中FIND_IN_SET和REPLACE函数简介

    一  FIND_IN_SET() SELECT * from u_user where FIND_IN_SET('32',tags) 上面的sql是精确查找,查找表中tags中含有32的记录(注意这里 ...

  7. [PyTorch]PyTorch/python常用语法/常见坑点

    目录 1. make_grid() 2. join与os.path.join() 3. 读文件写文件 4. json操作 5. tensorboard使用 6. python shutil.move ...

  8. SQL PL/SQL语法手册

    SQL  PL/SQL语法手册 目   录 第一部分  SQL语法部分 3 一. CREATE TABLE 语句 3 二. CREATE SEQUENCE语句 5 三. CREATE VIEW语句 6 ...

  9. MYSQL从入门到放弃系列:mysql基础语法

    Mysql基本语法 启动MySQL net start mysql 连接与断开服务器 mysql -h 地址 -P 端口 -u 用户名 -p 密码 跳过权限验证登录MySQL mysqld --ski ...

随机推荐

  1. Spotlights【思维+前缀和优化】

    https://blog.csdn.net/mengxiang000000/article/details/53291883   原博客地址 http://codeforces.com/group/1 ...

  2. python_tkinter弹出对话框2

    1.fledialog对话框 示例:askopenfilename(选择单个文件,获取文件路径) import tkinter # 导入消息对话框子模块 import tkinter.filedial ...

  3. c语言1博客作业07

    一.本周作业头 这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/SE2019-3/homework/9929 我 ...

  4. Python中正则匹配使用findall,捕获分组(xxx)和非捕获分组(?:xxx)的差异

    转自:https://blog.csdn.net/qq_42739440/article/details/81117919 下面是我在用findall匹配字符串时遇到的一个坑,分享出来供大家跳坑. 例 ...

  5. BZOJ 2281: [Sdoi2011]黑白棋 (Nim游戏+dp计数)

    题意 这题目有一点问题,应该是在n个格子里有k个棋子,k是偶数.从左到右一白一黑间隔出现.有两个人不妨叫做小白和小黑.两个人轮流操作,每个人可以选 1~d 枚自己颜色的棋子,如果是白色则只能向右移动, ...

  6. 25、自动装配-@Profile根据环境注册bean

    25.自动装配-@Profile根据环境注册bean 指定组件在哪个环境的情况下才能被注册到容器中 加了环境标识的,只有这个环境被激活才能注册到组件中 默认是default环境 写在类上,整个配置类的 ...

  7. Group by,并汇总求和

    static void Main(string[] args) { bbb(); Console.ReadKey(); } public static List<Dto> toAdd() ...

  8. Oracle 体系结构图

    Oracle体系结构图 详细图

  9. VS2012 Update 2: 0x80040154 corrupt install when starting the debugger

    使用VS2012開發console program ,发现生成32位的exe文件在別的机上不能正确运行,有文章說update1可以解決這個問題,如下 Setup.exe is not a valid ...

  10. Irrlicht引擎剖析一

    代码风格:  1.接口以I开头,实现以C开头,保存数据的结构体以S开头  2.函数名以小写字母开头,变量以大字母开头  3.接口的公共函数,其参数大部分给了默认值  4.采用名字空间    名字空间i ...