摘要: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)的正则表达式知多少?人人都能看得懂的详解来了!相关推荐

  1. 【深度学习】人人都能看得懂的卷积神经网络——入门篇

    近年来,卷积神经网络热度很高,在短时间内,这类网络成为了一种颠覆性技术,打破了从文本.视频到语音多个领域的大量最先进的算法,远远超出其最初在图像处理的应用范围. 卷积神经网络的一个例子 在客流预测.信 ...

  2. 一维卷积神经网络_人人都能看得懂的卷积神经网络——入门篇

    点击蓝字关注我们 近年来,卷积神经网络热度很高,在短时间内,这类网络成为了一种颠覆性技术,打破了从文本.视频到语音多个领域的大量最先进的算法,远远超出其最初在图像处理的应用范围. 卷积神经网络的一个例 ...

  3. 4种 LBS “附近的人” 实现方案,人人都能看的懂

    昨天一位公众号粉丝和我讨论了一道面试题,个人觉得比较有意义,这里整理了一下分享给大家,愿小伙伴们面试路上少踩坑.面试题目比较简单:"让你实现一个附近的人功能,你有什么方案?",这道 ...

  4. 人人都能看懂LSTM

    这是在看了台大李宏毅教授的深度学习视频之后的一点总结和感想.看完介绍的第一部分RNN尤其LSTM的介绍之后,整个人醍醐灌顶.本篇博客就是对视频的一些记录加上了一些个人的思考. 0. 从RNN说起 循环 ...

  5. 人人都能看懂的LSTMGRU

    看过的讲的最简单明了的: LSTM:人人都能看懂的LSTM GRU:人人都能看懂的GRU 自己对LSTM的理解与代码解释:https://blog.csdn.net/Strive_For_Future ...

  6. 人人都能看懂的Spring源码解析,Spring如何解决循环依赖

    人人都能看懂的Spring源码解析,Spring如何解决循环依赖 原理解析 什么是循环依赖 循环依赖会有什么问题? 如何解决循环依赖 问题的根本原因 如何解决 为什么需要三级缓存? Spring的三级 ...

  7. 人人都能看懂的Spring底层原理,看完绝对不会懵逼

    人人都能看懂的Spring原理,绝对不会懵逼 为什么要使用Spring? Spring的核心组件 Spring是如何实现IOC和DI的? 定义了BeanDefinition 扫描加载BeanDefin ...

  8. java正则匹配多个斜杠_正则表达式中两个反斜杠的匹配规则详解

    关于正则表达式raw的\匹配规则 这是我在学习中获得到的一个例子,第一表达式中匹配到的是none.于是乎我就在思考,为什么会匹配不到,假设\t被转义成一个\t,那么也应该匹配到\tsanle,而不是n ...

  9. 人人都能看懂的EM算法推导

    作者丨August@知乎(已授权) 来源丨https://zhuanlan.zhihu.com/p/36331115 编辑丨极市平台 估计有很多入门机器学习的同学在看到EM算法的时候会有种种疑惑:EM ...

最新文章

  1. 如何用纯 CSS 创作一个同心圆弧旋转 loader 特效
  2. 亿级搜索系统的基石,如何保障实时数据质量?
  3. MongoDB系列(一):简介及安装
  4. 冗余的阿里云实例开启和停止API
  5. python十个一行_python 如何将一系列数字十个一行输出
  6. 新技术刚测试就被全行业禁用,谷歌“杀死”Cookies真能重写规则吗?
  7. 【vue】使用Promise方法保证按顺序执行
  8. 深度置信网络python3实现
  9. 图片在线裁剪和图片上传总结
  10. 关于电瓶车管理的思考
  11. 让老照片重现光彩(三):完整论文的中文译文
  12. hive sql union all的性能优化
  13. 视频教程-Echarts+Asp.Net+Sql Server报表开发视频教程-.NET
  14. 【干货】2019年最新高级前端视频教程,速度收藏!!
  15. O-RAN notes(12)---Bronze E2 setup and O1-alarm example(1)
  16. 每天一个小实例——使用pdfplumber提取pdf表格及文本,并保存到excel
  17. 虚拟机使用vm8模式上网
  18. 【论文精读系列】Real-ESRGAN
  19. 库函数strcpy、memcpy和memset
  20. Java,第二次作业——显示台历

热门文章

  1. 关于总结记录的一点体会
  2. Git笔记(33) Rerere
  3. linux测试游戏下载,一波超人内测版最新下载-一波超人内测版游戏下载v1.0.2-Linux公社...
  4. 前端关系图谱插件_智游告诉你,前端开发应该学什么?
  5. 定义mysql日志_请教:如何查看mysql数据定义操作的日志
  6. sqlserver 字符串拼接_VB6 连接SQL Server数据库实例
  7. 【存档】MySQL(8.0.12 .msi)安装文档
  8. html5_canvas初学
  9. vim-录制命令的使用
  10. Openjudge-计算概论(A)-计算三角形面积