Go语言正则表达式示例:初学者完整指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Go (Golang) 正则表达式:初学者完整指南



正则表达式 (regex) 是一种强大的工具,用于根据指定模式搜索、提取和替换文本。在 Go (Golang) 语言中,通过标准包 regexp 实现正则表达式的操作。在本文中,我们将讲解在 Go 中使用 regexp 的基础知识,介绍关键函数,并提供实用示例,帮助您在项目中开始使用正则表达式。



什么是正则表达式,为什么在 Go 中需要它们?



正则表达式是一系列字符,定义了在文本中搜索的模式。例如,您可以检查字符串是否包含电子邮件、电话号码或特定数据格式。在 Go 中,regexp 包提供了用于编译模式、搜索匹配项、替换文本和提取子字符串的函数。



regexp 的主要功能:

  • 搜索 — 检查是否存在与模式匹配的子字符串。
  • 提取 — 获取所有匹配项或特定组。
  • 替换 — 将找到的片段替换为其他文本。
  • 验证 — 检查字符串格式(电子邮件、密码、URL)。


安装和导入 regexp 包



regexp 包是 Go 标准库的一部分,因此无需安装任何内容。要使用它,只需在文件开头导入它:



import (    "fmt"    "regexp")


1. 编译正则表达式:Compile 和 MustCompile



使用正则表达式的第一步是编译模式。在 Go 中有两种主要方法:



  • regexp.Compile(expr) — 返回编译后的表达式和错误(如果模式无效)。
  • regexp.MustCompile(expr) — 类似,但在出错时引发恐慌 (panic)。适用于静态模式。


示例:



package main

import ( "fmt" "regexp")

func main() { // 使用 MustCompile,因为模式已知有效 re := regexp.MustCompile(`[a-z]+`) // 使用 Compile 并处理错误 re2, err := regexp.Compile(`[0-9]+`) if err != nil { fmt.Println("编译错误:", err) return } fmt.Println(re, re2)}


2. 基本搜索和检查方法



编译后,我们得到一个 *regexp.Regexp 对象,其中包含一组方法。让我们看看最常用的方法。



MatchString — 检查匹配

方法 MatchString(s string) bool 如果字符串包含至少一个与模式匹配的子串,则返回 true。



re := regexp.MustCompile(`go`)fmt.Println(re.MatchString("golang"))   // truefmt.Println(re.MatchString("python"))   // false


FindString — 查找第一个匹配项

返回与模式匹配的第一个子字符串。



re := regexp.MustCompile(`[0-9]+`)fmt.Println(re.FindString("价格: 100 卢布, 折扣 20%")) // "100"


FindAllString — 查找所有匹配项

返回所有找到的字符串的切片。第二个参数是最大匹配数(-1 表示全部)。



re := regexp.MustCompile(`[0-9]+`)result := re.FindAllString("价格: 100 卢布, 折扣 20%", -1)fmt.Println(result) // ["100", "20"]


3. 使用子表达式提取组



模式中的圆括号创建捕获组。方法 FindStringSubmatch 返回一个切片,其中第一个元素是完整匹配,后续元素是组的值。



re := regexp.MustCompile(`(\\d{4})-(\\d{2})-(\\d{2})`)date := "日期: 2023-12-25"matches := re.FindStringSu                

博客

书籍推荐