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

閱讀時間約 6 分鐘

歡迎來到本系列的第二篇文章!在上一篇

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

我們已經深入了解了正則表達式的一些高級技巧。現在,我們將把這些技巧應用到實際的文本處理任務中,讓我們開始吧!

正則表達式替換

正則表達式不僅可以用來匹配文本,還可以用來進行替換。Golang 提供了 Regexp.ReplaceAll 函數來實現這一功能。

案例:

假設你有一個包含單詞的句子,你想將其中的元音字母替換為星號。我們可以使用正則表達式來實現這一需求。
package main

import (
"fmt"
"regexp"
)

func main() {
re := regexp.MustCompile(`[aeiou]`)
result := re.ReplaceAllString("Hello World", "*")
fmt.Println(result)
}

// 輸出:H*ll* W*rld


正則表達式在 URL 解析中的應用

正則表達式在處理 URL 時也非常有用。讓我們看一個實際的應用案例,如何從 URL 中提取不同的部分。

案例:

假設你需要從 URL 中提取協議、主機和路徑等部分。我們可以使用正則表達式來解析 URL。
package main

import (
"fmt"
"regexp"
)

func main() {
url := "https://www.example.com/path/to/resource"
re := regexp.MustCompile(`^(https?)://([^/]+)(/[^?]+)`)
match := re.FindStringSubmatch(url)
if len(match) >= 4 {
protocol := match[1]
host := match[2]
path := match[3]
fmt.Printf("Protocol: %s\nHost: %s\nPath: %s\n", protocol, host, path)
}
}

// 輸出:
// Protocol: https
// Host: www.example.com
// Path: /path/to/resource


使用 SubexpNames 獲取命名分組

Go的regexp庫允許你使用命名分組來捕獲正則表達式的匹配結果,這可以使你的代碼更具可讀性。

案例:

假設你需要從日期字符串中提取年、月和日。我們可以使用命名分組來捕獲這些信息。
package main

import (
"fmt"
"regexp"
)

func main() {
pattern := `(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})`
re := regexp.MustCompile(pattern)
match := re.FindStringSubmatch("2023-08-20")

names := re.SubexpNames()
for i, name := range names {
if i != 0 && name != "" {
fmt.Printf("%s: %s\n", name, match[i])
}
}
}

// 輸出:
// year: 2023
// month: 08
// day: 20


使用 ReplaceAllStringFunc

除了基本的替換功能,Go還提供了一個非常靈活的方法來進行基於正則匹配的替換。

案例:

假設你有一段文本,你想將其中的單詞轉換為大寫。我們可以使用 ReplaceAllStringFunc 來實現這一需求。
package main

import (
"fmt"
"regexp"
"strings"
)

func main() {
re := regexp.MustCompile(`[a-z]+`)
sentence := "hello world"
result := re.ReplaceAllStringFunc(sentence, strings.ToUpper)
fmt.Println(result)
}

// 輸出:HELLO WORLD


進階匹配技巧:字節切片匹配

Go的 regexp 庫也允許使用字節切片進行匹配,這是一個相對進階的技巧,尤其在處理 二進制數據大型數據 時非常有用。

案例:

假設你有一段文本,你想從中提取出所有的 "Go"。我們可以使用字節切片進行匹配。
package main

import (
"fmt"
"regexp"
)

func main() {
re := regexp.MustCompile(`Go`)
data := []byte("I love Go and Golang!")
matches := re.FindAll(data, -1)
for _, match := range matches {
fmt.Println(string(match))
}
}

// 輸出:
// Go
// Go


小結

在本篇文章中,我們進一步探討了正則表達式的實際應用,包括命名分組、使用 ReplaceAllStringFunc 進行替換,以及使用字節切片進行匹配。這些進階技巧能夠讓你更靈活地處理各種文本數據處理任務。通過本文的內容,你已經掌握了更多正則表達式的應用場景,並可以更自信地在實際項目中運用它們。在下一篇

Golang 正則進階篇 (三):通過 Golang 正則表達式優化代碼效能 文章中

我們將探討更高級的主題,如如何通過 Golang 正則表達式來優化代碼效能。敬請期待!

31會員
194內容數
歡迎來到【代碼的詩情】:探索程式語言之美 系列,這是一場優雅的程式之旅,透過詩歌的抒發,尋找不同程式語言的美感和精髓。 在這個系列中,我們將透過文字的韻律,深入探索多種程式語言的核心概念和語法,以及它們獨特的應用和技巧。每一篇詩歌都是一個故事,每一段代碼都是一句詩句,讓代碼的旋律和詩情在其中相互交織。
留言0
查看全部
發表第一個留言支持創作者!
KH Huang的沙龍 的其他內容
探索 Golang 正則表達式的進階技巧。理解貪婪和非貪婪匹配,運用惰性限定符優化效能,深入分組和非捕獲分組,並優化正則表達式的性能。
利用 Goroutines 實現 Observer Pattern。
探索 Golang 正則表達式的進階技巧。理解貪婪和非貪婪匹配,運用惰性限定符優化效能,深入分組和非捕獲分組,並優化正則表達式的性能。
利用 Goroutines 實現 Observer Pattern。
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
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
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
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 的技巧,於是就來寫篇筆記吧~