1. package main;
  2.  
  3. import (
  4. "regexp"
  5. "fmt"
  6. "strings"
  7. )
  8.  
  9. func main() {
  10. //1、过正则来判断字符串是否匹配
  11. if ok, _ := regexp.Match("^[0-9a-zA-Z_]+$", []byte("hello")); ok {
  12. fmt.Println("ok");
  13. }
  14.  
  15. //上面的例子也可以通过MatchString实现
  16. if ok, _ := regexp.MatchString("^[0-9a-zA-Z_]+$", "hello"); ok {
  17. fmt.Println("ok");
  18. }
  19.  
  20. //2、解析正则表达式
  21. //正则表达式如果合法,Compile会返回一个Regexp对象指针,通过该指针可以在任意字符串上进行操作
  22. re, _ := regexp.Compile("[0-9a-zA-Z_]+");
  23.  
  24. //3、查找正则匹配的字符串
  25. data := "I am a good man";
  26.  
  27. //Find函数返回匹配的第一个字符串
  28. one := re.Find([]byte(data));
  29. fmt.Println(string(one));
  30.  
  31. //FindAll函数返回匹配的所有字符串,n小于0返回全部字符串,否则返回指定长度
  32. all := re.FindAll([]byte(data), 2);
  33. //all为长度为2的slice
  34. fmt.Println(string(all[0]));
  35. fmt.Println(string(all[1]));
  36.  
  37. //FindIndex查找匹配的开始位置和结束位置
  38. ix := re.FindIndex([]byte(data));
  39. fmt.Println(ix);
  40.  
  41. //FindAllIndex查找所有匹配的开始位置和结束位置
  42. //n小于0返回全部,否则返回指定长度
  43. all_ix := re.FindAllIndex([]byte(data), -1);
  44. fmt.Println(all_ix);
  45. re2, _ := regexp.Compile("a(.*)g(.*)");
  46.  
  47. //FindSubmatch查找子匹配项
  48. sub := re2.FindSubmatch([]byte(data));
  49. //第一个匹配的是全部元素
  50. fmt.Println(string(sub[0]));
  51. //第二个匹配的是第一个()里面的
  52. fmt.Println(string(sub[1]));
  53. //第三个匹配的是第二个()里面的
  54. fmt.Println(string(sub[2]));
  55.  
  56. //FindAllSubmatch查找所有子匹配项
  57. all_sub := re2.FindAllSubmatch([]byte(data), 2);
  58. fmt.Println(string(all_sub[0][0]));
  59. fmt.Println(string(all_sub[0][1]));
  60.  
  61. //FindSubmatchIndex用于查找子匹配项的开始位置和结束位置
  62. sub_ix := re2.FindSubmatchIndex([]byte(data));
  63. fmt.Println(sub_ix);
  64.  
  65. //FindAllSubmatchIndex查找所有子匹配项的开始位置和结束位置
  66. //n小于0返回全部,否则返回指定长度
  67. all_sub_ix := re2.FindAllSubmatchIndex([]byte(data), -1);
  68. fmt.Println(all_sub_ix);
  69.  
  70. //4、正则替换
  71. //通过函数进行替换
  72. re3, _ := regexp.Compile("a");
  73. rep := re3.ReplaceAllStringFunc(data, strings.ToUpper);
  74. fmt.Println(rep);
  75.  
  76. //把匹配的所有字符a替换成b
  77. rep2 := re3.ReplaceAllString(data, "b");
  78. fmt.Println(rep2);
  79. }

  

golang 常用的正则查找与替换的更多相关文章

  1. visual studio 使用正则查找或替换示例

    visual studio 使用正则查找或替换示例 注意哟:使用之前应做好备份 visual studio 2015: 多行替换 (.*)point\ =(.*);\r\n.+this.([A-Za- ...

  2. JS 正则查找与替换

    JS正则查找与替换 一.前提/背景 今天遇到个问题,需要替换字符串中部分字符,这些字符相对整个字符串而言,与其他子字符串类似,无法单独提出:重要的是,该字符串是动态的生成的,就像我们日常看到的网页Ur ...

  3. frontpage 正则 查找与替换

    frontpage正则查找替换 frontpage查找用{}[不是() ]来匹配pattern, 并获取这一匹配 替换时匹配的字符用\1 \2 \3表示 第 N 个标记表达式 \N 在“替换”表达式中 ...

  4. Vim 常用操作、查找和替换

    这篇文章来详细介绍 Vim 中查找相关的设置和使用方法. 包括查找与替换.查找光标所在词.高亮前景/背景色.切换高亮状态.大小写敏感查找等. 查找 在normal模式下按下/即可进入查找模式,输入要查 ...

  5. Notepad 列编辑、正则查找、替换

    目标: 将源数据转成初始化sql语句.源数据: 104110040018,1,中国银行,中国银行天津琼州道支行,NULL,1100,天津市,12,天津市 104110040059,1,中国银行,中国银 ...

  6. Vim常用匹配、查找、替换命令总结

    以前都是从头开始找,最近处理log文件很多. 在vim 中输入 :1?XXXX 1的意思是文件的第一行 ?的意思是反向查找 XXXX就是你要找的关键字 更新:Linux 从末尾开始查找日志 tac c ...

  7. Sublime_正则查找替换

    在sublime编辑器中使用正则表达式对内容进行查找和替换: (1)Find——Replace... (2)出现下图界面 注意:点击左边第一个按钮,开启正则表达式功能. (3) (4)点击Replac ...

  8. 在VS中用正则表达式查找或替换

    2005VS和2008VS正则替换规则如下(2013VS不适合,不需要的同学可以直接跳到2013VS的操作办法): Example: 查找#incldue中带有gl开头的头文件的,用include.+ ...

  9. JS利用正则配合replace替换指定字符

    替换指定字符的方法有很多,在本文为大家详细介绍下,JS利用正则配合replace是如何做到的,喜欢的朋友可以参考下 定义和用法 replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一 ...

随机推荐

  1. 将IP地址字符串转为32位二进制

    def str2bin(s): temp = s.split('.') result = '' for i in range(len(temp)): temp[i] = str(bin(int(tem ...

  2. 4.Java的流程控制.md

    目录 1. break语句 2.continue 3.foreach语句 4.可变参数: 1. break语句 Java的break语句,正常情况下,break和c++一样,但是Java可以设置一个标 ...

  3. Unity3D初学之2D动画制

    作者:Alex Rose Unity最近宣布推出额外的2D游戏支持,添加了Box 2D物理和一个精灵管理器. 但这里还是有些技巧需要牢记在心.逐帧更改图像只是动画制作的冰山一角,若要让你的游戏出色运行 ...

  4. win8安装iis asp.net

    http://www.sanrengo.net/thread-62-1-1.html本文主要解决的是在win8操作系统下IIS配置asp.net的运行环境,当然win7的配置方法也大致相似,只有少许部 ...

  5. property 、classmethod 、 staticmethod 的用法

    @property # property是一个装饰器函数 ,作用:将一个方法伪装成属性 # 所有的装饰器函数都怎么用? 在函数.方法.类的上面一行直接@装饰器的名字 # 装饰器的分类: # 装饰函数 ...

  6. 3G开发遇到的问题

    1.使用线程时,编译时要加上gcc xxx.c -o xxx -lpthread 2.分离字符串"abc,de,fgh" printf("%s",strtok ...

  7. Java的学习01

    记录每天的学习情况.加油. /** * 测试包装类 * @author 小白 * */ public class TestWrappedClass { public static void main( ...

  8. el-js中循环遍历el的集合

    遇到问题的代码: var score=0; for(var i=0;i<${fn:length(tMovie.tComments) };i++){ score=${tMovie.tComment ...

  9. Spring Boot 邮件配置

    ######################################################## spring boot mail tls ###################### ...

  10. React DevTools

    [React DevTools] 在应用商店搜索安装.F12可打开.如果是react应用,在最右排会显示react标签. 参考:https://github.com/facebook/react-de ...