原文:How to Use Regex in PostgreSQL - LIKE and ~ Tilde[1]
作者:Data Pilot
翻譯整理:Alitrack
插個小廣告:
PG中文社區舉辦的第十屆PostgreSQL中國技術大會即將開幕,為回饋粉絲,特建立PG大會粉絲群,群內會不定期發放大會門票優惠券、折扣券,也會分享精彩議程、重磅嘉賓、大會精美禮品、大會花絮等精彩內容。掃碼帶您入群,每天驚喜多多!
正則表達式是一組按特定順序排列的字符,可幫助識別所需的正確輸入。我們將研究正則表達式,以及如何使用除~,~*,!~,!~*之外的與常規匹配的代字運算符系列以外的其他方法或運算符(如 LIKE,NOT LIKE 和 SIMILAR TO)使用它們。區分大小寫和不區分大小寫的情況下的表達式。LIKE 和 SIMILAR TO 運算符執行的功能大致相同。現在讓我們討論這些運算符,並看看如何將它們用作正則表達式的一部分。
正則表達式中的 LIKE 運算符如果輸入字符串與模式匹配,則 LIKE 運算符將返回 true 結果。NOT LIKE 僅在 LIKE 運算符返回 false 時才返回 true,並且僅在 LIKE 運算符返回 true 時才返回 false。
LIKE 和 NOT LIKE 的工作語法如下:
'String' LIKE 'pattern'
'String' NOT LIKE 'pattern'現在讓我們做一些實際的例子:
'NewYork' LIKE 'NewYork' (TRUE)
'NewYork' LIKE 'New%' (TRUE)
'NewYork' LIKE '_Yo_' (TRUE)
'NewYork' LIKE 'York' (FALSE)在上面的示例中,您可以看到沒有百分比和下劃線符號的文字模式,這意味著字符串本身將被視為模式,並且它的工作方式與等號相同,並且按字母順序匹配輸入內容。上例中的下劃線(_)基本上只查找單個字符匹配,百分比(%)則查找無,單個或多個字符匹配。LIKE 運算符最適合完整字符串,如果子字符串或字符串中的一小部分需要匹配,則在這種情況下,模式必須在子字符串開頭和子字符串結尾處都包含(%)。
波浪號正則表達式(~)與 LIKE 和 SIMILAR TO 運算符相比,Tilde 正則表達式更強大。Tilde(~)運算符可幫助正則表達式輕鬆匹配字符串的任何部分。以下是可以在此類別中使用的運算符:
與上述波浪號運算符相關的一些示例如下:
'London' ~ '.*London.*'
'London' ~* '.*London.*'
'London' !~ '.*London.*'
'London' !~* '.*London.*'Tilde 是 POSIX 正則表達式的一部分,並且其中還包含不同的功能。有一個子字符串函數可以幫助我們識別和拾取與 POSIX 正則表達式匹配的子字符串。返回值將是子字符串或與正則表達式匹配的文本,如果不匹配,則返回空值。在正則表達式和子字符串函數中也必須非常小心地使用括號。在下面給出的示例中,我們已經顯示了括號的正確用法,如果您使用任何其他方式將括號放入正則表達式中,則會導致異常,例如與初始子表達式匹配的子字符串部分,該子字符串包含在括號,將被返回。子字符串函數示例:
SUBSTRING('newyork' FROM 'w.o') (wyo)
SUBSTRING('newyork' FROM 'n.k') (newyork)
SUBSTRING('newyork' FROM 'w(.)o') (w)
結論還有其他多個 POSIX 函數,例如 regexp_matches(),regexp_split_to_table(),regexp_split_to_array()等。它們可以幫助您充分利用 PostgreSQL 中的正則表達式。如果我們嘗試更詳細地介紹正則表達式,那麼我們將擁有 Atom,量詞,約束,括號表達式,轉義,反向引用以及預定義的正則表達式元語法和特定的正則表達式匹配規則。
當然,正則表達式有幾種不同的類型和細節,它們不能包含在單個內容中,但是我們將嘗試在不久的將來通過將來的內容覆蓋所有這些內容。敬請關注!
參考資料[1]How to Use Regex in PostgreSQL - LIKE and ~ Tilde: https://kb.objectrocket.com/postgresql/how-to-use-regex-in-postgresql-572
喜歡我的文章,煩請【關注】、【在看】、【轉發】 ,🙏🙏!