摘要: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。
点击关注,第一工夫理解华为云陈腐技术~