Golang 正則進階篇 (一):正則語法加強版

更新於 2023/08/26閱讀時間約 5 分鐘

歡迎來到本系列的第一篇文章!你還記得我們之前聊過的

用 Golang 玩玩正則表達式 嗎?

今天,我們要走得更遠,深入 Go 語言。在這一篇中,我們將深入探討 Golang 正則表達式的高級技巧,讓你能夠更自信地處理各種複雜的文本/字串匹配和處理任務。


貪婪與非貪婪匹配

解釋貪婪匹配和非貪婪匹配的概念。

案例:

假設你有一段 HTML 代碼,你想提取出所有的超連結文本。使用正則表達式 href="(.*?)" 來實現非貪婪匹配,這樣可以確保只抓取每個超連結的 URL。
package main

import (
"fmt"
"regexp"
)

func main() {
html := `<a href="https://www.example.com">Link 1</a> <a href="https://www.example2.com">Link 2</a>`
re := regexp.MustCompile(`href="(.*?)"`)
matches := re.FindAllStringSubmatch(html, -1)

for _, match := range matches {
fmt.Println(match[1])
}
}


分組與捕獲

深入了解正則表達式中的分組機制。

案例:

假設你有一個日期字符串,你想從中提取年份和月份,但你只關心月份。使用正則表達式 (?:\d{4})-(\d{2})-\d{2} 來進行非捕獲分組,這樣你只捕獲到月份部分。
package main

import (
"fmt"
"regexp"
)

func main() {
dateStr := "2023-08-22"
re := regexp.MustCompile(`(?:\d{4})-(\d{2})-\d{2}`)
match := re.FindStringSubmatch(dateStr)

if len(match) > 1 {
fmt.Println("Month:", match[1])
}
}


正則表達式中的 OR 邏輯

解釋正則表達式中的 OR 邏輯如何構建和使用。

案例:

假設你要解析一個文本文件,其中包含不同單詞的拼寫變體。你希望捕獲所有包含 "color" 或 "colour" 的單詞。你可以使用正則表達式 \b(colou?r)\b 來實現這一目標。
package main

import (
"fmt"
"regexp"
)

func main() {
text := "colorful colours color"
re := regexp.MustCompile(`\b(colou?r)\b`)
matches := re.FindAllStringSubmatch(text, -1)

for _, match := range matches {
fmt.Println(match[1])
}
}


性能優化技巧

解釋避免回溯的重要性和影響。

案例:

假設你需要從一大段文本中匹配多個關鍵詞,使用惰性限定符可以優化匹配性能。
package main

import (
"fmt"
"regexp"
)

func main() {
text := "keyword1 something keyword2 another keyword3"
keywords := []string{"keyword1", "keyword2", "keyword3"}

for _, keyword := range keywords {
re := regexp.MustCompile(keyword)
if re.MatchString(text) {
fmt.Println("Found:", keyword)
}
}
}


小結

本篇文章中,我們已經深入學習了正則表達式的高級技巧,包括非貪婪匹配、分組與捕獲、OR 邏輯以及性能優化技巧。這些技巧將使你在處理文本匹配時更加靈活和高效。經過這篇文章的學習,你已經準備好在下一篇

Golang 正則進階篇 (二):實際應用

將這些知識應用到實際的文本處理任務中了。

avatar-img
31會員
194內容數
歡迎來到【代碼的詩情】:探索程式語言之美 系列,這是一場優雅的程式之旅,透過詩歌的抒發,尋找不同程式語言的美感和精髓。 在這個系列中,我們將透過文字的韻律,深入探索多種程式語言的核心概念和語法,以及它們獨特的應用和技巧。每一篇詩歌都是一個故事,每一段代碼都是一句詩句,讓代碼的旋律和詩情在其中相互交織。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
👨‍💻簡介 Go 語言有各種資料型別,分為基本型別和複合型別。基本型別包括: 整數、浮點數、布林值、字串 複合型別包括: 陣列、片段、結構、函式、對映、通道、介面 等。 整數型別 整數型別有許多種,像是 int8、int16、int32、int64。我們可以依據實際需求選擇。
說真話,在自閉症者記住規定,不只是死守,而且,還指出違規者的違規。 不單單是在學校,就算在醫院的病房,也是如此。 到時進職場,那還得了! 用責任制輔助自閉症者見到工作職責 基本上,像在急性病房用餐,都有護理師在監視。 而自閉症學員有記住規定,必然邊用餐邊監視。 而且,總是比護理人員早見到
Thumbnail
跟團住在號稱5星級飯店,SONO CALM GOYANG HOTEL 出發前在網路上找不到相關資料,google附近的地圖失真,於是來發一篇文 沒拍房間內部,房間還蠻大的,兩張單人床中間兩旁都有空間可以走動,開放式衣架,備品有小瓶沐浴乳、洗髮精、潤髮乳,都是濃濃的薄荷味,如果不能接受的話,最好自
Thumbnail
這款名為《國家衝突Conflict of Nations》的遊戲,如同其遊戲名,就是一款主打玩家掌權國家與其他敵對國家進行外交、戰爭等一系列行動的戰略戰爭遊戲。
Thumbnail
密技 那一天,阿郎很慎重、很嚴肅的告訴我們:「距離大學聯考剩下不到5個月了,也就是剩下不到150天了,各位即將進入最後的衝刺階段,現在各位可以選擇你最不擅長的一科放棄
Thumbnail
「鄭南榕」是個很重要的人物,這篇文章主要是預告本週三即將上船的《本刊文責一律由總編輯鄭南榕負責》之書評,並且說明為什麼我挑選這本書。
Thumbnail
建議先看過Golang 入門這篇再閱讀這篇! 使用Go官方提供的net/http library就能建立http web伺服器囉!
Thumbnail
遙想當年初探 Regular Expression,腦袋紮紮實實地被凌虐了一番,同時十分敬佩把正規表示式寫的簡潔有力又精確無誤的神人。最近學校在上編譯器課程,估計近期內便會接觸到不少 RegExp 的技巧,於是就來寫篇筆記吧~
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
👨‍💻簡介 Go 語言有各種資料型別,分為基本型別和複合型別。基本型別包括: 整數、浮點數、布林值、字串 複合型別包括: 陣列、片段、結構、函式、對映、通道、介面 等。 整數型別 整數型別有許多種,像是 int8、int16、int32、int64。我們可以依據實際需求選擇。
說真話,在自閉症者記住規定,不只是死守,而且,還指出違規者的違規。 不單單是在學校,就算在醫院的病房,也是如此。 到時進職場,那還得了! 用責任制輔助自閉症者見到工作職責 基本上,像在急性病房用餐,都有護理師在監視。 而自閉症學員有記住規定,必然邊用餐邊監視。 而且,總是比護理人員早見到
Thumbnail
跟團住在號稱5星級飯店,SONO CALM GOYANG HOTEL 出發前在網路上找不到相關資料,google附近的地圖失真,於是來發一篇文 沒拍房間內部,房間還蠻大的,兩張單人床中間兩旁都有空間可以走動,開放式衣架,備品有小瓶沐浴乳、洗髮精、潤髮乳,都是濃濃的薄荷味,如果不能接受的話,最好自
Thumbnail
這款名為《國家衝突Conflict of Nations》的遊戲,如同其遊戲名,就是一款主打玩家掌權國家與其他敵對國家進行外交、戰爭等一系列行動的戰略戰爭遊戲。
Thumbnail
密技 那一天,阿郎很慎重、很嚴肅的告訴我們:「距離大學聯考剩下不到5個月了,也就是剩下不到150天了,各位即將進入最後的衝刺階段,現在各位可以選擇你最不擅長的一科放棄
Thumbnail
「鄭南榕」是個很重要的人物,這篇文章主要是預告本週三即將上船的《本刊文責一律由總編輯鄭南榕負責》之書評,並且說明為什麼我挑選這本書。
Thumbnail
建議先看過Golang 入門這篇再閱讀這篇! 使用Go官方提供的net/http library就能建立http web伺服器囉!
Thumbnail
遙想當年初探 Regular Expression,腦袋紮紮實實地被凌虐了一番,同時十分敬佩把正規表示式寫的簡潔有力又精確無誤的神人。最近學校在上編譯器課程,估計近期內便會接觸到不少 RegExp 的技巧,於是就來寫篇筆記吧~