【go从零单排】Regular Expressions正则表达式

🌈Don't worry , just coding!
内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。

📗概念

Go 中的正则表达式是通过 regexp 包提供的,允许开发者使用强大的模式匹配功能来处理字符串。

💻代码

go 复制代码
package main

//导入了 bytes(用于处理字节切片)、fmt(用于格式化输出)和 regexp(用于正则表达式操作)包。
import (
	"bytes"
	"fmt"
	"regexp"
)

func main() {
	//使用 MatchString 函数检查字符串 "peach" 是否匹配正则表达式 "p([a-z]+)ch"。
	//这个正则表达式匹配以 p 开头、以 ch 结尾的字符串,中间包含一个或多个小写字母。
	match, _ := regexp.MatchString("p([a-z]+)ch", "peach")
	fmt.Println(match)
	//使用 Compile 函数编译正则表达式,并返回一个 Regexp 对象 r。
	r, _ := regexp.Compile("p([a-z]+)ch")
	//使用 MatchString 方法检查字符串 "peach" 是否匹配,输出结果为 true。
	fmt.Println(r.MatchString("peach"))
	//使用 FindString 方法查找字符串中第一个匹配的子串,输出结果为 peach。
	fmt.Println(r.FindString("peach punch"))
	//使用 FindStringIndex 方法返回匹配子串的起始和结束索引,输出结果为 [0 5],表示匹配的子串 "peach" 在字符串中的位置。
	fmt.Println("idx:", r.FindStringIndex("peach punch"))
	//使用 FindStringSubmatch 方法返回匹配的子串及其捕获组,输出结果为 [peach peach],其中第一个元素是整个匹配的字符串,第二个元素是捕获组的内容。
	fmt.Println(r.FindStringSubmatch("peach punch"))
	//使用 FindStringSubmatchIndex 方法返回匹配子串及其捕获组的索引,输出结果为 [0 5 0 5],表示整个匹配和捕获组的索引位置。
	fmt.Println(r.FindStringSubmatchIndex("peach punch"))
	//使用 FindAllString 方法查找所有匹配的子串,输出结果为 [peach punch]。
	fmt.Println(r.FindAllString("peach punch pinch", -1))
	//使用 FindAllStringSubmatchIndex 方法返回所有匹配子串及其捕获组的索引,输出结果为 [[0 5 0 5]]。
	fmt.Println("all:", r.FindAllStringSubmatchIndex(
		"peach punch pinch", -1))
	//使用 FindAllString 方法查找最多两个匹配的子串,输出结果为 [peach punch]。
	fmt.Println(r.FindAllString("peach punch pinch", 2))
	//使用 Match 方法检查字节切片是否匹配,输出结果为 true。
	fmt.Println(r.Match([]byte("peach")))
	//使用 MustCompile 方法编译正则表达式,如果编译失败则会引发(panic)。输出编译后的正则表达式对象。
	r = regexp.MustCompile("p([a-z]+)ch")
	fmt.Println("regexp:", r)
	//使用 ReplaceAllString 方法将字符串 "a peach" 中的匹配部分替换为 <fruit>,输出结果为 a <fruit>。
	fmt.Println(r.ReplaceAllString("a peach", "<fruit>"))
	//使用函数进行替换
	//使用 ReplaceAllFunc 方法,将匹配的部分替换为大写形式。这里 bytes.ToUpper 是一个函数,将字节切片转换为大写。输出结果为 a PEACH。
	in := []byte("a peach")
	out := r.ReplaceAllFunc(in, bytes.ToUpper)
	fmt.Println(string(out))
}

//输出
//true
//true
//peach
//idx: [0 5]
//[peach ea]
//[0 5 1 3]
//[peach punch pinch]
//all: [[0 5 1 3] [6 11 7 9] [12 17 13 15]]
//[peach punch]
//true
//regexp: p([a-z]+)ch
//a <fruit>
//a PEACH

🔍理解

  • 正则表达式:一种用于描述字符串模式的语法,可以用来匹配、查找、替换字符串。
  • regexp 包:Go 标准库中用于处理正则表达式的包,提供了多种方法来编译和执行正则表达式。

💡 Tips小知识点

正则表达式语法

Go 中的正则表达式支持 Perl 风格的语法,常用的模式包括:

  • 字符类:[abc] 匹配 a、b 或 c。
  • 重复:* 表示零个或多个,+ 表示一个或多个,? 表示零个或一个。
  • 边界:^ 表示行的开始,$ 表示行的结束。
  • 捕获组:(abc) 可以捕获匹配的内容。

常用的正则表达式函数:

  • MatchString:检查字符串是否匹配正则表达式。
  • Compile:编译正则表达式并返回一个 Regexp 对象。
  • FindString:查找字符串中第一个匹配的子串。
  • FindAllString:查找字符串中所有匹配的子串。
  • ReplaceAllString:替换字符串中所有匹配的子串。
  • FindStringSubmatch:返回匹配的子串及其捕获组。

正则表达式性能

  • 编译正则表达式:如果在循环中多次使用相同的正则表达式,建议在使用前编译它,以提高性能。
  • 使用 MustCompile:如果不希望手动处理编译错误,可以使用 MustCompile,它会在编译失败时引发(panic)。

💪无人扶我青云志,我自踏雪至山巅。

相关推荐
枫哥和java2 小时前
python serializer, model drf通过序列化器, 模型获取mysql 一张表某个字段数据库现存的最大值
数据库·python·mysql
"追风者"7 小时前
mysql数据库(六)pymysql、视图、触发器、存储过程、函数、流程控制、数据库连接池
数据库·mysql
HilariousDog7 小时前
Mysql数据库1——基本原理和基础操作
数据库·mysql·oracle
小诸葛的博客8 小时前
mysql中mvcc如何处理纯读事务的?
数据库·mysql
祁许8 小时前
【Golang】手搓DES加密
开发语言·golang·密码学
凡人的AI工具箱8 小时前
15分钟学 Go 实战项目六 :统计分析工具项目(30000字完整例子)
开发语言·数据库·人工智能·后端·golang
王大锤43919 小时前
golang通用后台管理系统10(退出登录,注销token)
golang
ezreal_pan9 小时前
vitess使用:从部署到go客户端连接查询
golang·vitess
Lil-Long9 小时前
MySQL-存储过程
数据库·mysql·oracle
苹果醋39 小时前
Redis | 第3章 对象《Redis设计与实现》
java·运维·spring boot·mysql·nginx