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用法相似。

 

 

 

posted @ 2018-06-11 18:20  寻觅beyond  阅读(4903)  评论(0编辑  收藏  举报
返回顶部