今天正好看到golang的正则模式,就针对常用的几个正则模式写个分享。 正则的基础我就不多说了,用法和原理都那么一回事。 Regexp也是兼容贪婪、非贪婪模式的匹配。
该文章写的有些乱,欢迎来喷 ! 另外文章后续不断更新中,请到原文地址查看更新
下面是golang regexp模式的几个用法. regexp本身是含有各种正则的标准用法,只是对于我来说关注的就这么几个。
#http://xiaorui.cc #找到索引位置 func (re *Regexp) FindIndex(b []byte) (loc []int) #替换英文成小写 func (re *Regexp) ReplaceAllStringFunc(src string, repl func(string) string) string #替换字符串 func (re *Regexp) ReplaceAllString(src, repl string) string #匹配查找正则模式 func (re *Regexp) FindSubmatch(b []byte) [][]byte
下面是golang regexp的具体使用模式.
#http://xiaorui.cc package main import ( "fmt" "regexp" "strings" ) func IsPhone(ip string) (b bool) { if m, _ := regexp.MatchString("1[0-9]{10,}", ip); !m { return false } return true } func main() { src := "i LoVe You , xiaorui.cc 13684390231 ,i like tornado lang, golang 正则 . shell zsh golang bash c+ java jsp php" //转换成小写 re, _ := regexp.Compile("\\w*") src = re.ReplaceAllStringFunc(src, strings.ToLower) fmt.Println(src) //替换所有数字 re, _ = regexp.Compile("\\d*") src = re.ReplaceAllString(src, "") fmt.Println(src) //判断是否是手机号码 fmt.Println(IsPhone("13684390231")) one, _ := regexp.Compile("xiao") index := one.FindIndex([]byte(src)) fmt.Println("FindIndex", index) one1, _ := regexp.Compile("正则") index1 := one1.FindIndex([]byte(src)) fmt.Println("FindIndex", index1) //第一个元素是匹配的全部元素,第二个元素是第一个()里面的 re2, _ := regexp.Compile("zsh\\s(\\w*)\\sbash") submatch := re2.FindSubmatch([]byte(src)) for _, v := range submatch { fmt.Println(string(v)) } // fmt.Println(strings.TrimSpace(src)) }
上面这段golang正则代码运行后的结果:
[ `go run s.go` | done: 791.092445ms ] i love you , xiaorui.cc 13684390231 ,i like tornado lang, golang 正则 . shell zsh golang bash c+ java jsp php i love you , xiaorui.cc ,i like tornado lang, golang 正则 . shell zsh golang bash c+ java jsp php true FindIndex [13 17] FindIndex [54 60] zsh golang bash golang
golang正则用法就这样了,这正则本来也没啥说的。 golang的doc已经说的例子和函数说明已经很明确了。
END.