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. 使用的正则语法

google/re2

Printf 语法 

 

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 := "[email protected]"
	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 := "[email protected]"
	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

 

转载于:https://www.cnblogs.com/lemos/p/7668216.html

你可能感兴趣的:(go 的正则表达式)