Golang 正则表达式
go语言的正则表达式匹配,可以使用go语言的regexp包。
go语言的正则表达式和其他语言的正则表达式规则都是一样的,只是调用的函数不同而已
推荐在构造正则表达式时,使用` pattern `格式。
regexp.Match
func Match(pattern string, b []byte) (matched bool, err error)
package main import ( "fmt" "regexp" ) func main() { matched, err := regexp.Match("^abc.*z$", []byte("abcdefgz")) fmt.Println(matched, err) //true nil matched, err = regexp.Match("^abc.*z$", []byte("bcdefgz")) fmt.Println(matched, err) //false nil }
regexp.MatchString
func MatchString(pattern string, s string) (matched bool, err error)
package main import ( "fmt" "regexp" ) func main() { matched, err := regexp.MatchString("^abc.*z$", "abcdefgz") fmt.Println(matched, err) //true <nil> matched, err = regexp.MatchString("^abc.*z$", "bcdefgz") fmt.Println(matched, err) //false <nil> }
regexp.Compile
func Compile(expr string) (*Regexp, error)
返回一个实现了regexp的对象指针,可以使用返回值调用regexp中定义的方法,如Match,MatchString,findXXX等
//func Compile(expr string) (*Regexp, error) r, _ := regexp.Compile(`f([a-z]+)`) //func (re *Regexp) Match(b []byte) bool fmt.Println(r.Match([]byte("foo"))) //true //func (re *Regexp) MatchString(s string) bool fmt.Println(r.MatchString("foo")) //true //func (re *Regexp) FindString(s string) string //只匹配一次 fmt.Println(r.FindString("foo func")) //foo //func (re *Regexp) FindStringIndex(s string) (loc []int) fmt.Println(r.FindStringIndex("demo foo func")) //[5 8] //func (re *Regexp) FindStringSubmatch(s string) []string //只匹配一次,返回的结果中,索引为0的值是整个匹配串的值,第二个值是子表达式的值 fmt.Println(r.FindStringSubmatch("this foo func fan")) //[foo oo] //对于FindStringSubmatch,如果表达式中没有子表达式,则不检测子表达式 demo, _ := regexp.Compile(`foo`) fmt.Println(demo.FindStringSubmatch("foo")) //[foo] //func (re *Regexp) FindStringSubmatchIndex(s string) []int fmt.Println(r.FindStringSubmatchIndex("foo func")) //[0 3 1 3] //func (re *Regexp) FindAllString(s string, n int) []string //n为-1时,匹配所有符合条件的字符串,n不为-1时,表示只匹配n次 fmt.Println(r.FindAllString("foo func fan", -1)) //[foo func fan] fmt.Println(r.FindAllString("foo func fan", 2)) //[foo func] //func (re *Regexp) FindAllStringSubmatchIndex(s string, n int) [][]int //n同样是表示匹配的次数,-1表示匹配所有 fmt.Println(r.FindAllStringSubmatchIndex("foo func demo fan", -1)) //[[0 3 1 3] [4 8 5 8] [14 17 15 17]] //替换 //func (re *Regexp) ReplaceAll(src []byte, repl []byte) []byte fmt.Println(string(r.ReplaceAll([]byte("this is foo, that is func, they are fan"), []byte("x")))) //this is x, that is x, they are x //func (re *Regexp) ReplaceAllString(src string, repl string) string fmt.Println(r.ReplaceAllString("this is foo, that is func, they are fan", "xx")) //this is xx, that is xx, they are xx
regexp.MustCompile
和上面的regexp.Compile用法相似。
如需转载,请注明文章出处,谢谢!!!