关于GaussDB(DWS)的正则表达式知多少?人人都能看得懂的详解来了!
摘要:GaussDB(DWS)除了支持标准的POSIX正则表达式句法,还拥有一些特殊句法和选项,这些你可了解?本文便为你讲解这些特殊句法和选项。
概述
正则表达式(Regular Expression,简称RE),通常被用来检索、替换那些符合某个模式(规则)的文本。正则表达式使用比较灵活,功能强大,因此经常被用到进行文本的搜索和替换中,帮助开发人员快速进行批量文本查询和处理。比如常用的linux的grep命令,许多程序设计语言比如Perl、Tcl也都支持正则表达式进行字符串操作。
GaussDB(DWS)支持的正则表达式
POSIX 1003.2中定义的正则表达式RE有两种形式:扩展RE或ERE(大致为egrep的RE),和基本RE或BRE(大致为ed的RE),GaussDB(DWS)都支持这两种形式,并实现了在编程语言(如Perl和Tcl)中广泛使用而POSIX标准中未包含的一些扩展。使用这些非POSIX扩展的RE在本文中称为高级RE或ARE。ARE几乎是ERE的超集,但是BRE有几种符号不相容性(而且是有限的)。
GaussDB(DWS)的正则表达式的主要句法和在其他程序语言中支持的句法功能相同,此文不再赘述。本文中对GaussDB(DWS)拥有的特殊形式和句法进行说明。
GuassDB(DWS)支持的正则表达式函数
GaussDB(DWS)提供了支持POSIX正则表达式的函数,如表1所示。
表1 GaussDB(DWS)中的正则表达式函数
从表1中看到,GuassDB(DWS)支持的正则表达式函数都有一个可选的flags参数,该参数的可选项及其含义是什么呢?下面将展开进行详细举例说明。
GaussDB(DWS)正则表达式函数的flags参数详解
表2中列举了表1中flags参数的所有可选项。
表2 GaussDB(DWS)正则表达式函数的flags参数的选项说明
g选项表2中给出的flags参数选项描述,非常简洁,理解起来比较困难。下面通过一些示例,来直观帮助理解上面这些flags参数选项的含义。
示例1-1:未指定’g‘选项,仅对第一个匹配项进行替换
示例1-2:指定’g‘选项,对所有匹配项进行替换
c 和 i 选项
示例2-1:默认情况下,进行大小写敏感匹配
示例2-2:显示指定进行大小写敏感匹配
示例2-3:显示指定进行大小写不敏感匹配
n[或m]、s、p、w选项对元字符点(.)的影响
示例3-1:指定选项n时,元字符点(.)不匹配换行符
示例3-2:指定选项s时,元字符点(.)匹配换行符
示例3-3:指定选项p时,元字符点(.)不匹配换行符
示例3-4:指定选项w时,元字符点(.)匹配换行符
n[或m]、s、p、w选项对元字符^、$的影响
示例5-1:指定选项n时,元字符点^、$匹配行首和行尾
示例5-2:指定选项s时,元字符点^、$不匹配行首和行尾
示例5-3:指定选项p时,元字符点^、$不匹配行首和行尾
示例5-4:指定选项w时,元字符点^、$匹配第一个行首匹配的行到最后一个行尾匹配的行
n[或m]、s、p、w选项对元字符 [^ 的影响
示例6-1:指定选项n时,换行符不匹配被[^排除的字符,所有行尾的换行符未被替换为M
示例6-2:指定选项s时,换行符匹配被[^排除的字符,所有行尾的换行符被替换为M
示例6-3:指定选项p时,换行符不匹配被[^排除的字符,所有行尾的换行符被替换为M
示例6-4:指定选项w时,换行符匹配被[^排除的字符,所有行尾的换行符被替换为M
t 和 x 选项
通常情况下,RE语法都是严格的,即RE中的所有字符都是重要的。严格语法是默认的,也可以通过指定选项t表示。
示例7-1:在严格语法中,空白字符也是重要的
GaussDB(DWS)还有一个扩展语法,通过指定x选项表示。在扩展语法中,RE中的空白字符(在这里,空白是空格、水平制表符、新行、和任何属于
space
字符类的字符。)将被忽略,以及#和换行符(或RE的结尾)之间的所有字符也将被忽略。这种语法允许对复杂的RE进行分段落和注释。
示例7-2:在扩展语法中,RE中的空格被忽略
该规则有三个例外:
· 转义字符后的空白或#被保留
示例7-3
· 括号表达式中的空白或#被保留
示例7-4
· 空白和注释不能出现多字符符号中。在 ARE 里,方括弧表达式外面,序列(?#ttt) (这里的ttt是任意不包含)的文本)是一个注释,完全被忽略。
示例7-5:空格出现在多字符符号中
示例7-6:注释出现在多字符符号中
当flags中指定了多个有相反含义的选项时,则后出现的选项覆盖前面出现的选项
示例8-1:后出现的s选项覆盖了n选项
示例8-2:后出现的n选项覆盖了s选项
GaussDB(DWS)正则表达式的特殊句法
两个特殊的前缀:: 和=
一个RE可以以两个特殊的前缀中的某一个开头。
RE以:开头*
RE以*:开头,则剩余的RE被当作一个ARE。(在GaussDB(DWS)中,这通常没有作用,因为RE被假定为ARE;但是,如果正则表达式函数的flags参数指定了ERE或BRE模式,那么它就会起作用。)
示例9-1:在BRE匹配模式中(regexp_replace函数的最后一个参数中指定的字母‘b’即表示使用BRE匹配模式),正则表达式中要表示圆括号表达式,需要将圆括号进行转义;同样,表示原子精确次数匹配序列的花括号,也需要进行转义
*示例9-2:增加: 前缀后,即使指定了使用BRE匹配模式,也是按照ARE的匹配模式的规则进行匹配
RE以=开头*
RE以*=开头,则RE的其余部分被认为是一个字面字符串,所有字符都被认为是普通字符。
示例10-1:‘|’在ARE匹配模式的正则表达式中是代表或含义的元字符
*示例10-2:代表或含义的元字符‘|’,在以=为前缀的正则表达式中,失去其元字符的特殊含义,被看作字符串中的普通字符
嵌套选项
ARE可以以嵌套选项开头:序列(?xyz) (其中xyz是一个或多个字母字符)指定影响RE其余部分的选项。这些选项覆盖任何先前确定的选项,特别是,它们可以覆盖由正则表达式运算符或正则表达式函数的flags参数隐含的大小写敏感行为。可选择的字母如表2所示中除’g’选项外的其他选项。
示例11-1:不含嵌套选项的大小写不敏感匹配
示例10-2:嵌套选项中的大小写敏感覆盖flags中的大小写不敏感匹配
结语
通过上面丰富的示例,深入了解了GaussDB(DWS)正则表达式的特殊句法和flags选项含义,在使用GaussDB(DWS)正则表达式函数时便可以得心应手。
本文分享自华为云社区《GaussDB(DWS)的正则表达式知多少 》,原文作者:wangxiaojuan8 。
关于GaussDB(DWS)的正则表达式知多少?人人都能看得懂的详解来了!的更多相关文章
- js字符串和正则表达式中的match、replace、exec等函数详解
正则并不是经常使用,而正则和字符串之间的函数关系又错综复杂,谁是谁的函数,又是怎么样的一种结果,往往我们是看一遍忘一遍,对此我是头疼不已,感觉自己是个笨蛋^_^. 为了以后不再查文档,特此把常用的函数 ...
- 正则表达式中的.*?和python中re.S参数的详解
本章的内容主要是为讲解在正则表达式中常用的.*?和re.S! 在正则表达式中有贪婪匹配和最小匹配:如下为贪婪匹配(.*) import re match = re.search(r'PY.*', 'P ...
- 关于正则表达式中参数/g /m的详细分析和例子详解
总结1:参数/g的用法 表达式加上参数g之后,表明可以进行全局匹配,注意这里"可以"的含义.我们详细叙述: 1)对于表达式对象的exec方法,不加入g,则只返回第一个匹配,无论执行 ...
- 人人都能看懂的卡西欧fx991cnx玩机指南,手把手教你如何利用计算器的漏洞爆机
专业术语说明 你是VerB还是VerC 别人问你这个问题的时候不要慌,帮你看你的计算器是Ver几: 同时按住shift.7.开机键 9 5次shift 第一行后半句即是 紧接着可以顺便看看计算器的序列 ...
- Python 正则表达式(字符)详解
Python正则表达式 - 简介 其实正则表达式这种技术,源于一个很简单的问题: 如何通过变成使得计算机具有在文本中检索某种模式的能力? 而正则表达式为通过编程实现高级的文本模 ...
- 十八般武艺玩转GaussDB(DWS)性能调优:SQL改写
摘要:本文将系统介绍在GaussDB(DWS)系统中影响性能的坏味道SQL及SQL模式,帮助大家能够从原理层面尽快识别这些坏味道SQL,在调优过程中及时发现问题,进行整改. 数据库的应用中,充斥着坏味 ...
- 一文详解数仓GaussDB(DWS) 函数出参带出方式
摘要:本文主要讲解DWS函数出参带出方式. 本文分享自华为云社区<GaussDB(DWS)功能 -- 函数出参 #[玩转PB级数仓GaussDB(DWS)]>,作者:譡里个檔 . DWS的 ...
- GaussDB(DWS)应用实战:对被视图引用的表进行DDL操作
摘要:GaussDB(DWS)是从Postgres演进过来的,像Postgres一样,如果表被视图引用的话,特定场景下,部分DDL操作是不能直接执行的. 背景说明 GaussDB(DWS)是从Post ...
- 详解GaussDB(DWS) explain分布式执行计划
摘要:本文主要介绍如何详细解读GaussDB(DWS)产生的分布式执行计划,从计划中发现性能调优点. 前言 执行计划(又称解释计划)是数据库执行SQL语句的具体步骤,例如通过索引还是全表扫描访问表中的 ...
- 十八般武艺玩转GaussDB(DWS)性能调优(三):好味道表定义
摘要:表结构设计是数据库建模的一个关键环节,表定义好坏直接决定了集群的有效容量以及业务查询性能,本文从产品架构.功能实现以及业务特征的角度阐述在GaussDB(DWS)的中表定义时需要关注的一些关键因 ...
随机推荐
- Kubernetes:kube-apiserver 之启动流程(一)
0. 前言 前面两篇文章 Kubernetes:kube-apiserver 之 scheme(一) 和 Kubernetes:kube-apiserver 之 scheme(二) 重点介绍了 kub ...
- CSP 2022 游寄
Day -2147483648 官网有了通知,但选手注册不知为何坏掉了: 先开坑: Day -大概两个月 注册了,但老师还没给我审核呜呜呜 第一轮 早上 早上起床就直接来机房了,不用跑操欸嘿. 上午 ...
- 将.View.dll文件反编译出来的*Views*.cs文件转换成.cshtml
先使用反编译工具将.View.dll文件反编译放入文件夹,然后将文件夹整体复制进\src\viewcs2cshtml\viewcs2cshtml\bin\Debug\net6.0\viewcs 复制完 ...
- 快速上手Prompt,让你的LLMs更智能
前言 在当前社会中,随着AIGC的盛行,使用好prompt可以让自己更上一层楼.今天,我将通过星火大模型重新认识prompt设计,并与大家分享一些使用技巧. 如果你想体验星火大模型的强大魅力,请登录h ...
- ABAP 生产订单长文本增强 <销售计划 、物料独立需求 长文本带入 计划订单-生产订单 >
计划订单长文本带入生产订单 尝试在生产订单保存后 用 creat_text 函数 去创建长文本,发现前台不显示,查看 文本抬头底表 STXL 发现有值 ,用READ 函数 读取 能读. DATA:td ...
- Java自定义ClassLoader实现插件类隔离加载
为什么需要类隔离加载 项目开发过程中,需要依赖不同版本的中间件依赖包,以适配不同的中间件服务端 如果这些中间件依赖包版本之间不能向下兼容,高版本依赖无法连接低版本的服务端,相反低版本依赖也无法连接高版 ...
- [ARC161F] Everywhere is Sparser than Whole (Judge)
Problem Statement We define the density of a non-empty simple undirected graph as $\displaystyle\fra ...
- [GDOI22pj1A] 邹忌讽秦王纳谏
时间空间限制: 1 秒, 256 MB 齐国人邹忌对齐国国君齐威王说,大王身边的人会因为私情.利益等原因而对大王阿谀奉承,所以不能光听好话,只有广泛接受群众的批评意见,才不会被蒙蔽双眼,齐国才能强盛. ...
- AtomicArray
AtomicInteger ai = new AtomicInteger(1); //1.获取值 System.out.println("ai.get = "+ai.get()); ...
- 实践篇:1 虚拟机使用rmp方式安装部署GitLab-ce
01 环境准备 电脑:MAC Air 虚拟机:VMware Fusion 12.2.3 Linux环境:CentOS 7 02 rpm方式安装部署GitLab服务 步骤1:centos 7 安装wge ...