REPLACE 语法
- 转自: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 语法的更多相关文章
- 基本MarkDown语法
引言 字符串作为一种常见的数据类型,在日常中我们面临各式各样的字符串处理问题,那么,这就要求我们必须掌握一些常用的字符串处理函数.本文尽量囊括常用的字符串处理函数,此文也作为个人的小总结. Pytho ...
- MySQL中的replace语句
一.背景 当使用replace语句更新access_apps表时,原有的mark列.remark列的信息丢失. CREATE TABLE `access_apps` ( `base` varcha ...
- sql语句语法
13.1. 数据定义语句 . ALTER DATABASE语法 . ALTER TABLE语法 . CREATE DATABASE语法 . CREATE INDEX语法 . CREATE TABLE语 ...
- 字符串方法 split() & replace()
split() 语法:stringObject.split(separator) 功能:把一个字符串分割成字符串数组 返回值:Array 说明:separator 是必须的,分隔符. var str= ...
- 有关正则表达式的Js方法(replace)
整理一下最近常用的几个有关正则的js方法 replace 语法:stringObject.replace(regexp/substr,replacement) 用法1 const str='abc13 ...
- Mysql中FIND_IN_SET和REPLACE函数简介
一 FIND_IN_SET() SELECT * from u_user where FIND_IN_SET('32',tags) 上面的sql是精确查找,查找表中tags中含有32的记录(注意这里 ...
- [PyTorch]PyTorch/python常用语法/常见坑点
目录 1. make_grid() 2. join与os.path.join() 3. 读文件写文件 4. json操作 5. tensorboard使用 6. python shutil.move ...
- SQL PL/SQL语法手册
SQL PL/SQL语法手册 目 录 第一部分 SQL语法部分 3 一. CREATE TABLE 语句 3 二. CREATE SEQUENCE语句 5 三. CREATE VIEW语句 6 ...
- MYSQL从入门到放弃系列:mysql基础语法
Mysql基本语法 启动MySQL net start mysql 连接与断开服务器 mysql -h 地址 -P 端口 -u 用户名 -p 密码 跳过权限验证登录MySQL mysqld --ski ...
随机推荐
- nginx 缓存区太小导致后台Connection reset by peer 报错
问题概述:图片bit 64生成数据流太大,导致小程序分享弹窗的二维码图片生成失败 后台报错: 排查: Client------>nginx------->h5------>nginx ...
- jQuery——jQuery对象与DOM对象
1.jQuery对象与DOM对象的区别 通过jQuery方法包装后的对象,是一个类数组对象.它与DOM对象完全不同,唯一相似的是它们都能操作DOM. 通过jQuery处理DOM的操作,可以让开发者更专 ...
- Postman----登录接口返回的reponse中token值传递给其他接口的一个简单接口测试示例
注: 在进行接口测试时,我们都需要使用登录,并且其他的接口都要在登录后进行,那么必不可少的会使用到将登录接口的reponse返回结果中的某些参数值需要进行返回,并传递给其他接口,这样才可以进行登录后的 ...
- Django 数据库mysql到models的映射方法
Django自动生成models 如果数据库表已经存在,执行命令,可以自动生成Models模型,实现models与数据表的映射 >>> python manage.py inspec ...
- Educational Codeforces Round 74 (Rated for Div. 2) A. Prime Subtraction
链接: https://codeforces.com/contest/1238/problem/A 题意: You are given two integers x and y (it is guar ...
- OSS - 有关于OSSClient的单例化
之前在每个控制层OSSClient都是通过新new的方式创建OSSClientBuilder().build(endpoint,accessKeyId,accessKeySecret)进行创建 后期我 ...
- 28、[源码]-AOP原理-@EnableAspectJAutoProxy
28.[源码]-AOP原理-@EnableAspectJAutoProxy
- 3、Spring Boot 2.x 核心技术
1.3 Spring Boot 核心技术 1.3.1 起步依赖 为项目的依赖管理提供帮助.起步依赖其实就是特殊的Maven,利用了传递依赖解析,把常用库聚合在一起,组成几个为特定功能而定制的依赖. 1 ...
- 行内元素进行绝对(absolute),固定(fixed)定位后会变成块级元素·
行内元素进行绝对定位后会变成块级元素· position:absolute; <!DOCTYPE html><html lang="en"><head ...
- PHP实现页面跳转功能
PHP跳转到指定页面的问题通常都会建设网站需求上看到,比如我们需要从一个页面跳转到另一个页面来实现某个功能或者效果.其实在PHP中进行页面跳转是有多种方法的,那么这篇文章就给大家介绍下,有哪些方法可以 ...