今天正好看到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.
