> 本章介绍正则表达式,使用这种模式可以实现对文本内容 校验、解析、替换
[TOC]
# 获取解析对象
> 可通过Compile() 和 MushCompile()来获取到解析对象,并进行下一步的正则匹配
## Compile()
> 返回 Regexp 对象以及是否错误信息
~~~
text := `wang666`
// 如果解析出错,则会panic
re, err := regexp.Compile(`[a-z]+`)
if err != nil {
return
}
match := re.FindString(text)
fmt.Println(match)
~~~
## MustCompile()
> 返回 Regexp,解析表达式失败则会panic
~~~
text := `wang666`
// 如果解析出错,则会panic
re := regexp.MustCompile(`[a-z]+`)
match := re.FindString(text)
fmt.Println(match)
~~~
# 校验是否匹配
~~~
text := `111@qq.com`
re := regexp.MustCompile(`^(\w+)@(\w+)\.(\w{3,5})$`)
result := re.MatchString(text)
if result == true{
fmt.Println("available")
}else {
fmt.Println("unavailable")
}
~~~
# 查找匹配内容
## 正则匹配单个值
### FindString() 匹配单个值
> 如果没有匹配的话,返回 空字符串
~~~
text := `my email is 111@qq.com`
re := regexp.MustCompile(`\w+@\w+\.\w{3,5}$`)
match := re.FindString(text)
fmt.Println(match)
~~~
> 运行结果
~~~
111@qq.com
~~~
### FindStringSubmatch() 提取分组内容
> 就是提取正则表达式括号里的内容,如果没有匹配的话,返回 nil
~~~
text := `my email is 111@qq.com`
re := regexp.MustCompile(`(\w+)@(\w+)\.(\w{3,5})$`)
match := re.FindStringSubmatch(text)
fmt.Println(match)
fmt.Println("--------------------")
fmt.Printf("value %v , name=%v\n", match, match[1])
~~~
> 运行结果
~~~
value [111@qq.com 111 qq com] , name=111
~~~
## 正则匹配多个值
### FindAllString() 匹配多值
> 如果没有匹配的话,返回 nil
~~~
text := `my email is 111@qq.com
my email2 is 222@qq.com`
re := regexp.MustCompile(`\w+@\w+\.\w{3,5}`)
matches := re.FindAllString(text, -1)
fmt.Println(matches)
fmt.Println("--------------------")
for _, value := range matches {
fmt.Println(value)
}
~~~
> 运行结果
~~~
[111@qq.com 222@qq.com]
--------------------
111@qq.com
222@qq.com
~~~
### FindAllStringSubmatch() 提取分组内容
> 就是提取正则表达式括号里的内容,如果没有匹配的话,返回 nil
~~~
text := `my email is 111@qq.com
my email2 is 222@qq.com`
re := regexp.MustCompile(`(\w+)@(\w+)\.(\w{3,5})`)
matches := re.FindAllStringSubmatch(text, -1)
fmt.Println(matches)
fmt.Println("--------------------")
for _, value := range matches {
fmt.Printf("value %v , name=%v\n", value, value[1])
}
~~~
> 运行结果
~~~
[[111@qq.com 111 qq com] [222@qq.com 222 qq com]]
--------------------
value [111@qq.com 111 qq com] , name=111
value [222@qq.com 222 qq com] , name=222
~~~
# 替换内容
> 使用ReplaceAllString() 进行全文本替换
~~~
text := `my email is 111@qq.com
my email2 is 222@qq.com`
re := regexp.MustCompile(`\w+@\w+\.\w{3,5}`)
newstr := re.ReplaceAllString(text, "***")
// 还可以只替换分组部分,如下
//newstr := re.ReplaceAllString(text, `***@$2.$3`)
fmt.Println(newstr)
~~~
> 运行结果
~~~
my email is ***
my email2 is ***
~~~
> 使用ReplaceAllStringFunc() 进行全文本替换
~~~
text := `my email is 111@qq.com
my email2 is 222@qq.com`
re := regexp.MustCompile(`(\w+)@(\w+)\.(\w{3,5})`)
newstr := re.ReplaceAllStringFunc(text, func(s string) string {
str := s
if s == "111@qq.com" {
str = "[data is encrypted]"
}
return str
})
fmt.Println(newstr)
~~~
> 运行结果
~~~
my email is [data is encrypted]
my email2 is 222@qq.com
~~~
- 基础知识
- 开发环境
- 包名规则
- 包初始化 (init)
- 基础数据类型
- 基础类型转换
- 格式化输出
- go指针
- 流程控制语句
- 函数定义
- 匿名函数
- 数组和切片
- map集合
- 结构体
- Interface接口
- 日期处理
- 数学计算
- 正则表达式
- 协程 (并发处理)
- channel
- waitgroup
- mutex (锁机制)
- websocket
- protobuf
- Redis
- 错误处理
- 打包程序
- NSQ消息队列
- 单元测试
- beego
- 安装入门
- Gin
- 快速入门
- 路由与控制器
- 处理请求参数
- 表单验证
- 处理响应结果
- 渲染HTML模版
- 访问静态文件
- Gin中间件
- Cookie处理
- Session处理
- Gin上传文件
- swagger
- pprof性能测试
- GORM
- 入门教程
- 模型定义
- 数据库连接
- 插入数据
- 查询数据
- 更新数据
- 删除数据
- 事务处理
- 关联查询
- 属于 (BELONG TO)
- 一对一 (Has One)
- 一对多 (Has Many)
- 多对多 (Many to Many)
- 预加载 (Preloading)
- 错误处理
- 第三方常用插件
- viper 读取配置文件
- zap 高性能日志
- Nginx代理配置
- Goland 快捷键