Go語(yǔ)言正則表達(dá)式如何處理重復(fù)模式

小樊
81
2024-11-07 13:17:39

在Go語(yǔ)言中,使用regexp包處理正則表達(dá)式時(shí),可以通過(guò)*+?這三個(gè)量詞來(lái)表示重復(fù)模式。

  1. *表示匹配前面的子表達(dá)式0次或多次。例如,a*表示匹配0個(gè)或多個(gè)連續(xù)的a字符。
package main

import (
	"fmt"
	"regexp"
)

func main() {
	pattern := regexp.MustCompile(`a*`)
	result := pattern.FindString("aaabbbccc")
	fmt.Println(result) // 輸出: "aaa"
}
  1. +表示匹配前面的子表達(dá)式1次或多次。例如,a+表示匹配1個(gè)或多個(gè)連續(xù)的a字符。
package main

import (
	"fmt"
	"regexp"
)

func main() {
	pattern := regexp.MustCompile(`a+`)
	result := pattern.FindString("aaabbbccc")
	fmt.Println(result) // 輸出: "aaa"
}
  1. ?表示匹配前面的子表達(dá)式0次或1次。例如,a?表示匹配0個(gè)或1個(gè)連續(xù)的a字符。
package main

import (
	"fmt"
	"regexp"
)

func main() {
	pattern := regexp.MustCompile(`a?`)
	result := pattern.FindString("aaabbbccc")
	fmt.Println(result) // 輸出: "a"
}

你還可以使用{m,n}來(lái)表示重復(fù)模式的次數(shù)范圍。例如,a{2,3}表示匹配2個(gè)或3個(gè)連續(xù)的a字符。

package main

import (
	"fmt"
	"regexp"
)

func main() {
	pattern := regexp.MustCompile(`a{2,3}`)
	result := pattern.FindString("aaabbbccc")
	fmt.Println(result) // 輸出: "aa"
}

注意:在使用{m,n}時(shí),如果m大于n,則匹配0次。例如,a{3,2}表示匹配0個(gè)或2個(gè)連續(xù)的a字符。

0