Golang RegExp Notes

更新 發佈閱讀 5 分鐘
遙想當年初探 Regular Expression,腦袋紮紮實實地被凌虐了一番,同時十分敬佩把正規表示式寫的簡潔有力又精確無誤的神人。最近學校在上編譯器課程,估計近期內便會接觸到不少 RegExp 的技巧,於是就來寫篇筆記吧~

Regular Expression

我不負責任的猜測,多數正常人一聽到 Regular Expression,反應應該會是

vocus|新世代的創作平台

Well~ 不過如果熟練的話其實蠻實用的,雖說網路上已經一大堆人寫了相關東西,但我仍要強迫自己寫一下幫助學習。

字元

  • [12345]:1 or 2 or 3 or 4 or 5
  • [0-9]:數字
  • [a-zA-Z0-9]:數字或大小寫字母
  • b[aeiou]t:bat、bet、bit、bot 或 but
  • [^0-9]:非數字
  • [^\^]:非 ^

字串

  • a:字母 a
  • a.:字母 a 及尾隨一個任意字元
  • ^ak:以 ak 為開頭
  • ka$:以 ka 為結尾

計數

  • a?:零個或一個 a
  • [0-9]+:一個或多個數字
  • [aeiou]*:零個或多個小寫母音字母
  • a{4}:連續四個 a
  • a{4,6}:連續 4~6 個 a
  • a{4,}:連續至少四個 a

特殊字元

  • \b:英文字的邊界,反之則為 \B
  • \d:任一數字,反之則為 \D
  • \w:任一數字或大小寫字幕或底線,反之則為 \W
  • \s:任一空白字元,反之則為 \S
  • \t:定位字元
  • \n:換行符號

好歐一些基本常用的應該都寫上了,如果覺得簡單的話,可以嘗試各種排列組合,設計出些符合生活中某些字串的 regular expression,很快就會感受到這並不是件容易的事了~XD


Golang 中的 regexp 包

Golang 的標準庫十分方便強大,我在熟悉完基本語法後,便開始學習標準庫來提升自己的開發效率和品質。而 Regular Expression 可說是近代語言不可少的標配之一,接著就來筆記一下 Golang 中 regexp 包的一些基本應用,參考自 Go by Example

這個 gist 就是最簡單的 regexp 使用方式,MatchString 可以接受兩個參數,第一個是 pattern,第二個是 string,會嘗試在 string 中匹配 pattern,並回傳一個 (bool, error) 結構,分別是是否匹配成功及發生的錯誤。

但其實可以先把 regexp 給 compile 起來方便後續使用,畢竟單純的字串是無法進行匹配工作的,仍要做些處理才能實現匹配功能,但這種 compile 的工作做一次就夠了,做太多次只是浪費資源。

Compile 會回傳一個 (*Regexp, error),分別是 Regexp 結構和編譯時的錯誤。接著我們可以對產出的 Regexp 結構呼叫其函數。

其中 MatchString 和 FindString 各自會回傳是否匹配成功及第一個匹配成功的字串,FindStringSubmatch 可回傳第一個符合整體表達式及其中滿足規則並未寫死的 字串的 slice。FindAllString 則會會傳多個匹配成功字串的 slice,第二個參數可指定數量,若為 -1 則全部回傳。

我們也可以針對 Index 方面取得更進一步的資訊。

FindStringIndex 可以回傳第一個符合整體表達式的字串的 Index 範圍,FindStringSubmatchIndex 則會再多回傳其中滿足規則並未寫死的部分的 Index 範圍。FindAllStringSubmatchIndex 則是回傳多個 Index 範圍,同樣可以藉由第二個參數指定回傳數量。

同時也可以針對匹配到的字串執行函數,這裡需要再引入 “bytes”包。

如此ㄧ來我們便能透過 bytes.ToUpper 把所有匹配成功的字串轉成大寫字母。


這次就先寫到這裡吧,Regular Expression 是門博大精深的學問,至少我是這麼覺得啦~更多詳細技巧可以參考 Document

留言
avatar-img
Rain Wu的沙龍
4會員
8內容數
一個初入 Golang 世界的菜鳥,希望能透過筆記的方式幫助自己釐清問題。
你可能也想看
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
題目:你的團隊正在開發一個新的高級文本編輯器,你的任務是實現行號功能。請編寫一個函數,該函數接受一個字符串列表作為輸入,並返回每行字符串前面附帶正確的行號。行號從 1 開始計數。格式為 n: 字符串。請注意冒號和空格之間的間隔。
Thumbnail
題目:你的團隊正在開發一個新的高級文本編輯器,你的任務是實現行號功能。請編寫一個函數,該函數接受一個字符串列表作為輸入,並返回每行字符串前面附帶正確的行號。行號從 1 開始計數。格式為 n: 字符串。請注意冒號和空格之間的間隔。
Thumbnail
在資料驗證(三):自訂公式的教學,我寫了一串可以驗證身分證字號的公式: 如果 A1 是正確的身分證字號格式就會是 TRUE、錯誤的話則是 FALSE。 我會在這篇文稍稍解釋一下上面這串是怎麼做的,也歡迎大家在文章下方留言,告訴我你的看法、或是有更好的建議也可以跟我說說!
Thumbnail
在資料驗證(三):自訂公式的教學,我寫了一串可以驗證身分證字號的公式: 如果 A1 是正確的身分證字號格式就會是 TRUE、錯誤的話則是 FALSE。 我會在這篇文稍稍解釋一下上面這串是怎麼做的,也歡迎大家在文章下方留言,告訴我你的看法、或是有更好的建議也可以跟我說說!
Thumbnail
探索 Golang 正則表達式的進階技巧。理解貪婪和非貪婪匹配,運用惰性限定符優化效能,深入分組和非捕獲分組,並優化正則表達式的性能。
Thumbnail
探索 Golang 正則表達式的進階技巧。理解貪婪和非貪婪匹配,運用惰性限定符優化效能,深入分組和非捕獲分組,並優化正則表達式的性能。
Thumbnail
題目敘述 題目會給我們兩個字串作為輸入,分別是字串s和字串t,問我最少要做幾次字元轉換,讓字串t和字串s成為Anagram"同字母異序詞"? 註: 例如 god 和 dog 就是 Anagram 同字母異序詞,也是就說,組成字母相同,但是順序可以重新排列。 題目的原文敘述 測試範例 Ex
Thumbnail
題目敘述 題目會給我們兩個字串作為輸入,分別是字串s和字串t,問我最少要做幾次字元轉換,讓字串t和字串s成為Anagram"同字母異序詞"? 註: 例如 god 和 dog 就是 Anagram 同字母異序詞,也是就說,組成字母相同,但是順序可以重新排列。 題目的原文敘述 測試範例 Ex
Thumbnail
我們介紹了字串和列表的索引和切片操作。索引使用方括號[]來選擇字串或列表中的特定元素,並可以使用正向索引(從0開始)或反向索引(從最後一個元素為-1)來訪問元素。切片使用方括號[]和冒號:來選擇字串或列表中的一段子序列,指定起始位置和結束位置(不包含),並可以使用步長來控制間隔。
Thumbnail
我們介紹了字串和列表的索引和切片操作。索引使用方括號[]來選擇字串或列表中的特定元素,並可以使用正向索引(從0開始)或反向索引(從最後一個元素為-1)來訪問元素。切片使用方括號[]和冒號:來選擇字串或列表中的一段子序列,指定起始位置和結束位置(不包含),並可以使用步長來控制間隔。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
題目:如果提供的數字在0-9之間,請以文字形式返回。輸入1、輸出 “One”
Thumbnail
題目:如果提供的數字在0-9之間,請以文字形式返回。輸入1、輸出 “One”
Thumbnail
精通 Golang 正則表達式的代碼優化。透過高效的字符串處理、動態模式生成和編譯,以及處理複雜文本匹配,將正則表達式融入你的代碼中,提升效能。
Thumbnail
精通 Golang 正則表達式的代碼優化。透過高效的字符串處理、動態模式生成和編譯,以及處理複雜文本匹配,將正則表達式融入你的代碼中,提升效能。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News