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中所有邮箱地址替换为"<email>"
    findS10 := match.ReplaceAllString(str, "<email>")
    fmt.Printf("%T====%v\n", findS10, findS10)
    // 执行结果:string====abcde 1234 <email> <email> <email>

    // 字符串替换,使用函数作为替换参数
    // 此处用于将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 "你好中国"
}

原创文章,作者:NCZIC,如若转载,请注明出处:https://www.beidanyezhu.com/a/26634.html

(0)
NCZIC的头像NCZIC
上一篇 2025-01-04
下一篇 2025-01-05

相关推荐

  • go语言可以用哪些框架

    go语言使用的框架有:1、Beego框架;2、Buffalo框架;3、Echo框架;4、Gin框架;5、Iris框架;6、Revel框架。 6款好用的go语言web框架: Beeg…

  • go语言怎么引入包

    go语言引入包的方法:可以直接使用【import "包名"】来引入一个包。如果需要同时引入多个包,可以使用【import {"包名" &qu…

    2025-01-07
  • go语言有什么开发工具

    go语言开发工具有:1、GoLand;2、LiteIDE;3、Eclipse。LiteIDE是一款开源、跨平台的轻量级Go语言集成开发环境。 开发工具介绍: 1、GoLand Go…

    2025-01-07
  • go语言的7大优势是什么

    go语言的优势有:1、学习曲线容易;2、开发效率和运行效率高;3、自由高效;4、拥有强大的标准库;5、部署方便;6、高度支持并发性;7、稳定性高。 go语言的优势: 1、学习曲线容…

  • go语言指的是什么

    go语言是一种静态强类型、编译型语言,它的语法与C语言相近。go语言规定每行程序结束后不需要撰写分号,大括号不能够换行放置,if判断式和for循环不需要以小括号包裹。 详细介绍: …

  • go语言适合于什么领域

    go语言适用的领域有:1、服务器编程;2、分布式系统;3、网络编程;4、内存数据库;5、云平台;6、游戏服务端的开发。go语言是一种静态强类型、编译型语言。 Go(又称 Golan…

  • yum如何安装go语言

    yum安装go语言的方法:首先执行【yum -y install golang】命令安装go;然后编辑profile文件,配置环境变量;最后执行【source /etc/profi…

  • vscode如何配置go语言开发环境

    Golang 环境配置 1) 首先下载适合你系统的安装包 2)下载完成安装到指定目录即可。我这里是(D:\Go)。 3)配置Glang环境变量 进入我的电脑->高级设置-&g…

    2025-01-07
  • go语言defer怎么用

    go语言defer的用法:1、defer语句在函数返回之前或函数中的return语句之后执行;2、多个defer语句的执行顺序是逆序执行;3、在panic语句后的defer语句不执…

  • windows下如何搭建go语言开发环境

    windows下搭建go语言开发环境的方法:1、在官网下载go语言开发包;2、安装go语言开发包;3、设置GOPATH环境变量;4、测试go开发包是否安装成功。 具体步骤如下: 一…

    2025-01-07

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

分享本页
返回顶部