当前位置: 首页 > article >正文

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

挪威特罗姆瑟夜景

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

📗概念

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

💻代码

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)。

💪无人扶我青云志,我自踏雪至山巅。
在这里插入图片描述


http://www.kler.cn/a/393328.html

相关文章:

  • Spring-Webflux + Reactor + Netty 初体验
  • ubuntu ros 解决建完图后 保存的地图非常小的问题
  • 链游系统定制化开发:引领游戏产业的新时代
  • stringUtils详细解释
  • 【Android、IOS、Flutter、鸿蒙、ReactNative 】约束布局
  • 文件上传漏洞--理论
  • 【秋招笔试-支持在线评测】11.13花子秋招(已改编)-三语言题解
  • Elasticsearch专栏-4.es基本用法-查询api
  • 【软件测试】白盒、黑盒、灰盒测试,按照测试阶段分类
  • Blender进阶:颜色节点
  • 使用 unicorn 和 capstone 库来模拟 ARM Thumb 指令的执行(一)
  • 多链路负载均衡设置在哪里?
  • 移动应用开发:实现简易调查问卷
  • 【go从零单排】File Paths文件路径
  • [ 网络安全介绍 5 ] 为什么要学习网络安全?
  • 自动化测试策略 —— 新功能还是老功能的回归测试?
  • 地面沉降数值模拟/三维地质建模数据处理技术应用
  • 机器学习5_支持向量机_原问题和对偶问题
  • 数字字符串格式化
  • 【Rust调用Windows API】杀掉指定进程(包括兄弟进程、子进程、父进程)
  • 人力资源招聘系统-提升招聘效率与质量的关键工具
  • Docker 部署Nacos 单机部署 MYSQL数据持久化
  • 计算机网络(4)之交换技术,分层技术和默认网关
  • 怎么在MindMaster里插入剪贴画?
  • c++ 二分查找
  • Mac Nginx 前端打包部署