如何在 Go 中使用正則表達式

2023/09/26閱讀時間約 6 分鐘


raw-image

👨‍💻 簡介

在處理string時,正則表達式是一個非常有用的工具。Go語言的regexp package 可以使用正則表達式,用來執行如檢查string是否匹配某個模式、提取匹配的subString等操作。

匹配功能

  • regexp.MatchString:檢查一個string是否匹配某個模式。
  • regexp.Compile:編譯一個正則表達式。

語法如下:

// 檢查一個string是否匹配某個模式。
func regexp.MatchString(pattern string, s string) (matched bool, err error)

// 編譯一個正則表達式。
func regexp.Compile(expr string) (*Regexp, error)
package main

import (
"fmt"
"regexp"
)

func main() {
// 檢查string是否匹配模式
matched, err := regexp.MatchString("Go", "Hello, Go!")
if err != nil {
fmt.Println(err)
}
fmt.Println("Matched:", matched) // true
}

提取功能

  • regexp.FindString:找到第一個匹配的subString。
  • regexp.FindAllString:找到所有匹配的subString。

語法如下:

// 找到第一個匹配的subString。
func (re *Regexp) FindString(s string) string

// 找到所有匹配的subString。
func (re *Regexp) FindAllString(s string, n int) []string
package main

import (
"fmt"
"regexp"
)

func main() {
re, err := regexp.Compile("Go")
if err != nil {
fmt.Println(err)
}

// 找到第一個匹配的subString
firstMatch := re.FindString("Hello, Go! Go is awesome!")
fmt.Println("First Match:", firstMatch) // "Go"

// 找到所有匹配的subString
allMatches := re.FindAllString("Hello, Go! Go is awesome!", -1)
fmt.Println("All Matches:", allMatches) // ["Go" "Go"]
}

替換功能

  • regexp.ReplaceAllString:替換匹配的subString。

語法如下:

// 替換匹配的subString。
func (re *Regexp) ReplaceAllString(src, repl string) string
package main

import (
"fmt"
"regexp"
)

func main() {
re, err := regexp.Compile("Go")
if err != nil {
fmt.Println(err)
}

// 替換匹配的subString
replaced := re.ReplaceAllString("Hello, Go! Go is awesome!", "Golang")
fmt.Println(replaced) // "Hello, Golang! Golang is awesome!"
}

其他功能

  • regexp.Split:按照正則表達式分割string。

語法如下:

// 按照正則表達式分割string。
func (re *Regexp) Split(s string, n int) []string
package main

import (
"fmt"
"regexp"
)

func main() {
re, err := regexp.Compile(" ")
if err != nil {
fmt.Println(err)
}
// 按照正則表達式分割string
parts := re.Split("Hello, Go! Go is awesome!", -1)
fmt.Println(parts) // ["Hello,", "Go!", "Go", "is", "awesome!"]
}

📚Reference

16會員
75內容數
golang
留言0
查看全部
發表第一個留言支持創作者!