许多程序语言都支持使用正则表达式对字符串进行操作,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的邮箱 你好中国 你好中国"中的所有汉字查询出来match1 := regexp.MustCompile("\\p{Han}")findS13 := match1.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 "你好中国"
}

转载于:https://blog.51cto.com/634435/2109038

Go语言中正则表达式的使用相关推荐

  1. c 语言中字符串中r,R语言字符串管家--stringr包案例解析

    注,有疑问 加QQ群..[174225475].. 共同探讨进步 有偿求助请 出门左转 door , 合作愉快 str_detect() detects the presence or absence ...

  2. C语言中嵌入正则表达式

    标准的C和C++都不支持正则表达式,但有一些函数库可以辅助C/C++程序员完成这一功能,其中最著名的当数Philip Hazel的Perl-Compatible Regular Expression库 ...

  3. 在C/C++语言中使用正则表达式

    本文所有的内容都来自网络,加上一些个人的理解,不保证正确性,欢迎批评指正 说起 正则表达式(Regular Expression),也许有的朋友天天都在使用,比如grep.vim.sed.awk,只是 ...

  4. 在linux下,如何在C语言中使用正则表达式

    http://hi.baidu.com/d_south/blog/item/9d22a34b1fc2bcf483025c53.html 在linux下,如何在C语言中使用正则表达式(整理) 2008- ...

  5. 在C语言中巧用正则表达式

    From: http://blog.chinaunix.net/space.php?uid=20435679&do=blog&id=1680220 标准的C和C++都不支持正则表达式, ...

  6. R语言中的正则表达式

      这篇博客是对R语言中的正则表达式进行的整理,以实际应用为主,主要用于学习备忘,后续会根据需要进行补充.常用函数部分仅给出部分示例,详细使用方式可以使用R的帮助函数查询. 1.语法规则 常用符号及含 ...

  7. c语言正则表达式测试数字,C语言中使用正则表达式

    POSIX 规定了正则表达式的C语言库函数, 参见regex(3), 我们已经学了很多C函数得用法  读者应该具备自己看懂man手册得能力 C语言中使用正则表达式一般分为三部: 1.编译正则表达式re ...

  8. 正则表达式以及在C语言中调用相关函数

    正则表达式 正则表达式是用来描述某种规则的字符串的表达式. 脱离了具体语言的一些规则,但是现在大多数程序设计语言都实现了 支持正则表达式: C语言 python C++ C# java - 但是每种语 ...

  9. 【C语言】C程序中正则表达式的使用

    1.C/C++中的正则表达式 标准的C和C++都不支持正则表达式的使用,但是在某些场景下正则表达式的存在可以为程序员带来很大的便利,比如用户注册中对用户名和密码的判断,看是否符合命名规则. 虽然不支持 ...

  10. C语言中使用正则表达式

    POSIX 规定了正则表达式的C语言库函数, 参见regex(3), 我们已经学了很多C函数得用法  读者应该具备自己看懂man手册得能力 C语言中使用正则表达式一般分为三部: 1.编译正则表达式re ...

最新文章

  1. JPEG文件格式简单分析
  2. ButterKnife不同版本配置
  3. AndroidStudio3.4+Unity2018.3,导出JAR包给UNITY使用
  4. IEWebBrowser组件的execWB方法
  5. 通过这个方法竟然可以看到声音传播的速度!?
  6. 【LeetCode】按 tag 分类索引 (900题以下)
  7. LeetCode--Sum Root to Leaf Numbers
  8. getopt设计shell脚本选项
  9. autoitv3点击windows界面
  10. 基础编程题目集 6-10 阶乘计算升级版 (20 分)
  11. 嵌入式linux appace,嵌入式Linux攻略 ACE程序移植过程详细解析 — IT技术
  12. Py之pandas:dataframe学习【转载】
  13. 【Hoxton.SR1版本】Spring Cloud Gateway之GlobalFilter全局过滤器
  14. 在Windows上使用Mingw-W64进行C/C++开发(gcc工具链)
  15. OpenHarmony如何控制屏幕亮度
  16. 突变!微软将结束对Office Android应用的支持
  17. MD5大小写,32,16
  18. 计算机课题参与者的学术背景,课题参与有几种方法
  19. Delphi线程同步
  20. 大型网站架构 图片服务器分离

热门文章

  1. maya curveflow修改
  2. 深度强化学习- 最全深度强化学习资料
  3. 智能优化算法:足球联赛竞争算法-附代码
  4. 点云能量预测:KPConv点云输入方式
  5. 网易编程题目——相反数:
  6. HBase简介及使用
  7. kubernetes集群pod异常状态ContainerCreating的解决
  8. Flutter之SnackBar原理详解
  9. ListView乱谈之ListView中View复用机制的简单解析
  10. 听说大家想补补算法和数据结构,给大家推荐一个GitHub 15k星的图文版开源项目...