189 8069 5689

Go语言中正则表达式的使用-创新互联

许多程序语言都支持使用正则表达式对字符串进行操作,Go语言也不例外,正则表达式的语法网上很多教程,本文主要介绍在Go语言中如何使用正则表达式,通过以下实例进行说明,并添加了详细的注释,不会的小伙伴一看就明白了。

让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:域名注册虚拟主机、营销软件、网站建设、桥西网站维护、网站推广。
func main() {
    // 要操作的字符串
    str := "abcde 1234 my@163.com 386832092@qq.com admin@hotmail.com"

    // 正则表达式字符串----用于匹配邮箱地址,来源于网络
    regexStr := "([A-Za-z0-9\u4e00-\u9fa5]+)@([a-zA-Z0-9_-]+)(\\.[a-zA-Z0-9_-]+)+"

    // 定义正则表达式
    match := regexp.MustCompile(regexStr)
    // 或者
    //match,err := regexp.Compile(regexStr)
    // 或者
    //match := regexp.MustCompile(regexStr)

    // 判断是否存在正则表达式匹配的字符串========方法1
    // 此处用于判断str中是否存在邮箱地址
    isExist := match.MatchString(str)
    fmt.Println(isExist)
    // 执行结果:true

    // 判断是否存在正则表达式匹配的字符串========方法2
    // 此处用于判断"8888888888"中是否存在邮箱地址
    isExist1, _ := regexp.MatchString(regexStr, "8888888888")
    fmt.Println(isExist1)
    // 执行结果:false

    // 查询左边第一次匹配的字符串
    // 此处用于查询str中左边第一个邮箱地址
    findS1 := match.FindString(str)
    fmt.Println(findS1)
    // 执行结果:my@163.com

    // 查询从左边开始匹配的n个字符串,为-1时,则全部匹配,返回是一个string切片
    // 此处用于查询str中左边开始2个邮箱地址
    findS2 := match.FindAllString(str, 2)
    fmt.Printf("%T====%v\n", findS2, findS2)
    // 执行结果:[]string====[my@163.com 386832092@qq.com]

    // 查询从左边开始匹配的第一个字符串,返回的是下标,是一个int切片
    // 此处用于查询str中左边第一个邮箱地址在str中的下标
    findS3 := match.FindStringIndex(str)
    fmt.Printf("%T====%v\n", findS3, findS3)
    // 执行结果:[]int====[11 21]
    fmt.Println(str[findS3[0] : findS3[1]])
    // 执行结果:my@163.com

    // 子匹配,只匹配从左边开始的第一个字符串,在正则表达式中每一个小括号里的内容为一个子串,返回一个string切片
    // 此处用于匹配str中左边第一个邮箱地址,并匹配第一个邮箱地址中的子串
    findS4 := match.FindStringSubmatch(str)
    fmt.Printf("%T====%v\n", findS4, findS4)
    // 执行结果:[]string====[my@163.com my 163 .com]
    // 其中my和163及.com都是子串

    // 子匹配,只匹配从左边开始的第一个字符串,返回一个记录下标的int切片
    // 此处用于匹配str中左边第一个邮箱及其子串的下标
    findS5 := match.FindStringSubmatchIndex(str)
    fmt.Printf("%T====%v\n", findS5, findS5)
    // 执行结果:[]int====[11 21 11 13 14 17 17 21]
    // 其中11 21是my@163.com的下标,11 13是my的下标,14 17是163的下标,17 21是.com的下标

    // 子匹配,匹配从左边开始的n个字符串,为-1时则匹配所有,返回一个二维string切片
    // 此处用于匹配str中所有邮箱地址,及这些邮箱地址中的子串
    findS6 := match.FindAllStringSubmatch(str, -1)
    fmt.Printf("%T====%v\n", findS6, findS6)
    // 执行结果:[][]string====[[my@163.com my 163 .com] [386832092@qq.com 386832092 qq .com] [admin@hotmail.com admin hotmail .com]]

    // 子匹配,匹配从左边开始的n个字符串,为-1时则匹配所有,返回一个记录下标的二维int切片
    // 此处用于匹配str中所有邮箱地址及这些邮箱地址中的子串的下标
    findS7 := match.FindAllStringSubmatchIndex(str, -1)
    fmt.Printf("%T====%v\n", findS7, findS7)
    // 执行结果:[][]int====[[11 21 11 13 14 17 17 21] [22 38 22 31 32 34 34 38] [39 56 39 44 45 52 52 56]]

    // 使用byte切片作为参数和返回值
    // 此处用于匹配str中第一个邮箱地址,以byte切片作为参数和返回值
    findS8 := match.Find([]byte(str))
    fmt.Printf("%T====%v====%s\n", findS8, findS8, findS8)
    执行结果:[]uint8====[109 121 64 49 54 51 46 99 111 109]====my@163.com

  // 使用byte切片作为参数,判断是否有匹配的字符串
    // 此处用于判断str中是否存在邮箱地址,以byte切片为参数
    findS9 := match.Match([]byte(str))
    fmt.Printf("%T====%v\n", findS9, findS9)
    // 执行结果:bool====true

    // 字符串替换,返回替换后的字符串
    // 此处用于将str中所有邮箱地址替换为""
    findS10 := match.ReplaceAllString(str, "")
    fmt.Printf("%T====%v\n", findS10, findS10)
    // 执行结果:string====abcde 1234   

    // 字符串替换,使用函数作为替换参数
    // 此处用于将str中的所有邮箱地址替换为下面replace的返回值
    findS11 := match.ReplaceAllStringFunc(str, replace)
    fmt.Printf("%T====%v\n", findS11, findS11)
    // 执行结果:string====abcde 1234 my的邮箱 你好中国 你好中国

    // 字符串替换,用byte切片,使用函数作替换参数
    // 此处用于将str中的邮箱地址全部替换为大写字母,以byte切片为参数和返回值
    findS12 := match.ReplaceAllFunc([]byte(str), bytes.ToUpper)
    fmt.Printf("%T====%v====%s\n", findS12, findS12, findS12)
    // 执行结果:[]uint8====[97 98 99 100 101 32 49 50 51 52 32 77 89 64 49 54 51 46 67 79 77 32 51 56 54 56 51 50 48 57 50 64 81 81 46 67 79 77 32 65 68 77 73 78 64 72 79 84 77 65 73 76 46 67 79 77]====abcde 1234 MY@163.COM 386832092@QQ.COM ADMIN@HOTMAIL.COM

    // \p{Unicode脚本类名}  Unicode类 (脚本类)    Han----中文
    // 此处用于将上面"abcde 1234 my的邮箱 你好中国 你好中国"中的所有汉字查询出来
    match2 := regexp.MustCompile("\\p{Han}")
    findS13 := match2.FindAllString(findS11, -1)
    fmt.Printf("%T====%v\n", findS13, findS13)
    // 执行结果:[]string====[的 邮 箱 你 好 中 国 你 好 中 国]
}

func replace(str string) string {
    if strings.EqualFold(str, "my@163.com") {
        return "my的邮箱"
    }
    return "你好中国"
}

创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。


本文名称:Go语言中正则表达式的使用-创新互联
本文URL:http://jkwzsj.com/article/ddgceg.html

其他资讯