go 的正则表达式
go 操作字符串。由于 go 中的字符串不是对象,所以没有直接操作字符串的相关方法。要操作字符串可以使用 strings 包或者 regexp 包处理。
一、简要介绍一下,strings 包 (strings)
常见的方法示例
// demo_common.go package main import ( "fmt" "strings" ) func demo_index() { str1 := "lemos1235lemos" s1 := strings.Index(str1, "os") s2 := strings.LastIndex(str1, "os") fmt.Println(s1) fmt.Println(s2) } func demo_contains() { str1 := "lemos1235" s1 := strings.Contains(str1, "os") fmt.Println(s1) } func demo_split() { str1 := "http://www.cnblogs.com/page/23" page := strings.Split(str1, "/")[4] fmt.Println(page) } func demo_to_lower_and_to_upper() { str1 := "lemOS1235LEMos" up := strings.ToUpper(str1) low := strings.ToLower(str1) fmt.Println(up, low) str2 := " lemos1235 !" // with all leading and trailing unicode code points contained in cutset will be removed low_trim := strings.Trim(str2, " !") fmt.Printf("[%q]", low_trim) } func main() { // demo_index() demo_contains() // demo_split() demo_to_lower_and_to_upper() }
二、regex 包的介绍
1. 使用的正则语法
2. 常用的函数方法
名称 | 说明 | 备注 |
Match | 验证正则表达式是否匹配 []byte | - |
MatchString | 验证正则表达式是否匹配 string | - |
FindString | ||
FindStringSubmatch | 返回 []string | 分组 |
FindAllString | Regexp的方法,匹配字符串,返回匹配结果组成一个 []string。限定参数 -1表示不限定,其它表示限定。 | 贪婪模式 |
FindAllStringSubmatch | Regexp的方法,返回一个 [][]string |
贪婪模式, 分组 |
正则的判断语句:MatchString
// demo_match.go package main import ( "regexp" "fmt" ) func demo_match_string() { // MatchString could match from anywhere of strings, not only from the start ma,err := regexp.MatchString("\\d", "lemos w2d") if err != nil { fmt.Println(err) } fmt.Println(ma) } func main() { demo_match_string() }
输出
3 12 true 23 LEMOS1235LEMOS lemos1235lemos ["lemos1235"]
正则的查询语句 find
// demo_find.go package main import ( "fmt" "regexp" ) // 非贪婪模式(non-greedy) func demo_find_string() { pa := regexp.MustCompile("^[a-z1-9]+@\\d+.com$") str1 := "xfe1235@163.com" result := pa.FindString(str1) fmt.Println(result) } // 分组模式 func demo_find_string_submatch() { pa := regexp.MustCompile("a(x*)b(y|z)c") str1 := "axxbyc" result := pa.FindStringSubmatch(str1) for i, v := range result { fmt.Println(i, v) } // fmt.Println(result) } // 贪婪模式(greedy) func demo_find_all_string() { pa := regexp.MustCompile("^[a-z1-9]+@\\d+.com$") str1 := "xfe1235@163.com" result := pa.FindAllString(str1, -1) fmt.Println(result[0]) } func main() { demo_find_string() demo_find_string_submatch() demo_find_all_string() }
输出
command-line-arguments xfe1235@163.com 0 axxbyc 1 xx 2 y xfe1235@163.com