關於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 。

點擊關注,第一時間瞭解華爲雲新鮮技術~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章