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

server/2024/11/15 3:38:51/

挪威特罗姆瑟夜景

🌈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.ppmy.cn/server/142010.html

相关文章

【AI声音克隆整合包及教程】第二代GPT-SoVITS V2:创新与应用

一、引言 随着科技的迅猛发展&#xff0c;声音克隆技术已经成为一个炙手可热的研究领域。SoVITS&#xff08;Sound Voice Intelligent Transfer System&#xff09;&#xff0c;作为该领域的先锋&#xff0c;凭借其卓越的性能和广泛的适用性&#xff0c;正在为多个行业带来前所…

Java LeetCode练习

3194. 最小元素和最大元素的最小平均值 package JavaExercise;import java.util.Arrays;public class Exercise {public static void main(String[] args) {int[] array {1,2,3,7,8,9};System.out.println(Solution.minimumAverage(array));} }class Solution {public static…

力扣-Hot100-技巧【算法学习day.31】

前言 ###我做这类文档一个重要的目的还是给正在学习的大家提供方向&#xff08;例如想要掌握基础用法&#xff0c;该刷哪些题&#xff1f;&#xff09;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关键点&#xff0c;力扣上的大佬们的题解质量是非常非常高滴&am…

Window.history API学习笔记

Window.history API学习笔记 在现代前端开发中&#xff0c;单页应用&#xff08;SPA&#xff09;的流行让我们对于页面的浏览历史管理需求愈加明显。window.history API作为浏览器提供的原生API&#xff0c;能够帮助开发者更加细致地控制用户的导航体验。本文将介绍window.his…

通过SpringTask模拟打印机定时向数据库传入模拟数据

目录 一、SpringTask简介及使用方法 1.简介 2.使用方法 1&#xff09;在启动类上加上EnableScheduling注解 2&#xff09;编写定时任务类Task 3.注意事项 二、实现模拟打印机定时向数据库传入数据 1.用到的DTO类 2.用到的Mapper 3.Task类 一、SpringTask简介及使用方…

SpringBoot(十五)springboot集成Sentinel

目前负责的业务一直有一个小问题没有太好的解决办法,这个小问题是什么呢?传说中的学生选课。 这玩意跟商城的秒杀还不一样,商城的秒杀是萝卜多,坑少,最后不一定能秒杀的到。学生选课是一个萝卜一个坑,最后你一定能选上课。这么相对来说,商城秒杀要比学生选课的难度要高一…

Vuex 与 Pinia:Vue 状态管理库的选择与对比

1. Vuex 与 Pinia 概述 Vuex Vuex 是 Vue 官方的状态管理库&#xff0c;首次发布于 Vue 2.x&#xff0c;专门为 Vue 应用设计的全局状态管理工具。Vuex 将所有的状态放在一个全局 store 中&#xff0c;组件通过分发&#xff08;dispatch&#xff09;动作&#xff08;actions&…

如何优化Kafka消费者的性能

要优化 Kafka 消费者性能&#xff0c;你可以考虑以下策略&#xff1a; 并行消费&#xff1a;通过增加消费者组中的消费者数量来并行处理更多的消息&#xff0c;从而提升消费速度。 批量消费&#xff1a;配置 fetch.min.bytes 和 fetch.max.wait.ms 参数来控制批量消费的大小和…