PostgreSQL Tips:如何在PostgreSQL中使用正則表達式-LIKE和〜Tilde

2021-03-02 苦寒行

原文: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

喜歡我的文章,煩請【關注】、【在看】、【轉發】 ,🙏🙏!

相關焦點

  • Python正則表達式:特殊符號和字符
    正表達式為高級的文本模式匹配,抽取,與/或文本形式的搜索和替換功能提供了基礎。簡而言之,正則表達式(簡稱regex)是由一些字符和特殊符號組成的字符串,它描述了模式的重複或者表達多個字符。python通過標準庫中的re模塊來支持正則表達式。
  • JavaScript 正則表達式匹配漢字
    感謝 @黃俊亮 的投稿,原文:JavaScript 正則表達式匹配漢字。轉載請註明作者和出處。
  • 學習Python正則表達式
    然而,讓李丹煩惱的是,評論是以自由文本的形式展現,電話號碼就在這些評論中。如何不需要一個接一個地複製和粘貼,就可以輕鬆地找到這些電話號碼?Python中的正則表達式(re)就可以解決這個問題!正則表達式正則表達式是一個具有特殊字符的序列。
  • 通過正則表達式快速獲取電影的下載地址!正則-永遠滴神!
    本文將實現通過正則表達式快速獲取電影的下載地址。如果對正則表達式不熟悉的讀者,點擊 此處 學習正則表達式。在爬取網頁信息的任務中,可以使用正則表達式的方式快速的提取某個標籤內的指定信息,以爬取電影的下載地址為例。
  • 使用requests+正則表達式爬取貓眼電影排行
    本節中,我們利用requests庫和正則表達式來抓取貓眼電影TOP100的相關內容。
  • 正則表達式帶來的幸福生活
    希望廣大讀者能認可,同時內心裡也會有那麼一點點「狂妄」的期盼:儘管關於正則表達式已經有很多書籍了,但這本書濃縮了我的長期思考,尤其是處理中文字符的經驗,這是任何其它書籍都不具備的。Jeffrey Friedl的《精通正則表達式》暢銷全球,簡體中文版由我翻譯不過我也知道,在當時這絕對只是「痴心妄想」。一來很少有簡體技術圖書輸出到臺灣的先例,二來我即便想看看對岸有沒有興趣,我都不知道該找誰,該如何做。更何況,我們從小受到的教育都是要謙虛低調,不要張揚。這種當「出頭鳥」的事情,還是不要去多想才好。
  • 流計算風雲再起 - PostgreSQL攜PipelineDB力挺IoT
    車聯網結合PostGIS,實現對汽車的位置實時跟蹤和軌跡合併,動態的繪製大盤數據(分時,車輛區域分布)。4. 物流動態動態的跟蹤包裹在每個環節的數據,聚合結果,在查詢時不需要再從大量的數據中篩選多條(降低離散掃描)。5.
  • PostgreSQL 資料庫中 DISTINCT 關鍵字的 4 種用法
    今天我們就來介紹一下 PostgreSQL 資料庫中 DISTINCT 關鍵字的 4 種不同用法。DISTINCT 表示返回不同部門 id 和性別的組合值。;第二個語句使用了窗口函數,除了 ROW_NUMBER 之外,也可以使用 RANK 或者 DENSE_RANK 等函數。
  • 從Postgres95到PostgreSQL9.5:新版亮眼特性
    Postgres95 介紹「在 PostgreSQL 中使用 JSON 除了可以更好地處理移動網際網路數據外,對於傳統業務的由於業務形態可能隨時變化,而導致資料庫中「寬表」設計也有很大的幫助。」但在很多核心系統中,PostgreSQL 上世紀 90 年代到 20 世紀初企業級,甚至軍方核心系統中幾乎唯一使用的開源資料庫。比較重點的系統包括:NASA、美國海空軍、銀行等。
  • Python3爬蟲之豆瓣電影TOP250(requests、Xpath、正則表達式、CSV、二進位數據儲存)
    return m_urlsif __name__ == '__main__':    for i in range(0, 250, 25):        movie_urls = index_pages(i)【2x00】解析模塊定義一個解析函數 parse_pages(),利用 for 循環,依次提取 index_pages() 函數返回的列表中的元素
  • 阿里雲資料庫專家德歌告訴你PostgreSQL的那些事
    在雲棲社區中,活躍著許多阿里技術大牛,他們在自己的技術領域都是佼佼者,具有一定的業界影響力。在社區,他們通過撰寫技術博文、解答技術難題,為開發者貢獻著自己的能量。他們,就是雲棲社區的技術神俠!PostgreSQL 1000億數據量 正則匹配 速度與激情http://yq.aliyun.com/articles/7549?utm_source=yqdg3.PostgreSQL 9.5 新特性之 - 水平分片架構與實踐http://yq.aliyun.com/articles/6635?utm_source=yqdg4.
  • AE表達式精通大法
    其實表達式並不像我們想像的那樣複雜,它比真正意義上的編程要簡單很多。我們只需要了解一些表達式的規則,以及一些常用表達式的命令,我們就足以應付工作中遇到的所有表達式的問題,你同樣可以使用表達式製作一些非常酷的效果。     所以通過這篇文章我們先來簡單的了解一下AE表達式的一些規則,包括一些常用的表達式命令,我這裡做個簡單的講解。
  • AE表達式:回彈
    在UI動效製作中,設計者會經常使用到AE。利用AE組織界面流程,製作動態原型,可以極大的加速我們的工作流程。
  • 角色建模3ds Max 2017角色創建技術〜【機翻】
    將使用強烈的變形顏色創建面和裝備,並使用3D更加逼真地創建紋理和三維效果。哪怕是現實中不可能的變形角色,都可以像真實存在一樣存在。現在,我們正在做的是重複「原始創建⇒除法⇒變換」。我主要使用立方體或圓柱體作為建模的基本原語。這些對於在拓撲中沒有怪癖的情況下創建乾淨,精益的配置特別有用。3ds Max中的建模是通過「可編輯多邊形」完成的。
  • 使用Swing製作進位轉化器
    進位轉化1.各進位之間的轉化在計算機科學中,常用的進位有二進位、八進位、十進位和十六進位。在開發過程中使用比較多的是二進位和十進位的。String regex:用於過濾文本框中字符內容的正則表達式。默認為"[0-9]+"。1.輸入進位滑杆(JSlider in):設置正確的屬性以及顯示位置。該組件還應該添加變動監聽(ChangeListener)。在監聽中應保持inHex和滑杆in的值一致。此外還應該更新正則表達式regex的內容。
  • AE中文版表達式修復插件來啦!
    我們都知道中文版的AE套模板的時候,經常會遇到表達式報錯之類的提示,因為網上下載的大部分AE模板都來自國外。表達式裡的參數都是用英文書寫的,在中文版的AE下由於不規範,所以導致這種報錯。不得不切換到英文版打開,用中文版打開各種彈窗顯示表達式錯誤,CC 2015版之前的都會彈窗,有時彈窗點都點不完。2015之後雖然不會彈出,但是依然報錯,這個問題是不是很頭疼。用英文版吧?   不會。   用中文版吧?  丟失效果。模板無法使用。今天分享的這個腳本,可以一鍵修復中文版AE帶來的表達式錯誤問題。最重要的是 免費!免費!免費!
  • 程式語言中的快樂天使——Ruby
    本書對應Ruby 2.3,通俗易懂地講解了編程時所需要的變量、常量、方法、類、流程控制等的語法,以及主要類的使用方法和簡單的應用,讓沒有編程經驗的讀者也能輕鬆掌握Ruby,做到融會貫通並靈活應用到實際工作中。高橋徵義(作者)日本Ruby協會創始人兼會長。日本知名的IT電子書出版平臺達人出版會董事長。