Go语言正则表达式实例详解:完整指南

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

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

开始课程

Go语言中的正则表达式:文本处理的强大工具

正则表达式是基于模式搜索、提取和替换文本的必备工具。在Go语言(Golang)中,对正则表达式的支持通过标准库 regexp 包实现。该包提供了一种快速且安全的方式来处理模式,其语法与Perl和RE2类似。本文将通过实际示例,介绍该包的主要功能。



1. regexp 包基础操作

regexp 包遵循“一次编译,多次使用”的原则。这能提高重复应用同一模式时的性能。主要函数:

  • regexp.Compile(expr) — 编译正则表达式。返回 *Regexp 和一个错误。
  • regexp.MustCompile(expr) — 功能同上,但在出错时会引发 panic。便于初始化全局变量。
  • regexp.MatchString(expr, s) — 检查字符串 s 中是否至少包含一个与模式匹配的内容。


package main

import ( "fmt" "regexp")

func main() { // 简单检查:字符串是否包含数字? matched, _ := regexp.MatchString(`\\d+`, "订单编号12345") fmt.Println(matched) // true

// 编译模式以便重复使用 re := regexp.MustCompile(`[a-z]+`) fmt.Println(re.MatchString("hello")) // true fmt.Println(re.MatchString("HELLO")) // false}


注意:默认情况下,MatchString 搜索部分匹配(类似于 strings.Contains)。若要使字符串完全匹配模式,请使用锚点 ^ 和 $。



2. 搜索与提取数据

要查找所有匹配项或第一个匹配项,请使用 FindString、FindAllString、FindStringSubmatch 方法及其字节切片对应的版本。



2.1. 查找第一个匹配项

re := regexp.MustCompile(`\\b\\w+@\\w+\\.\\w+\\b`)email := re.FindString("联系我们:support@example.com 或 info@test.org")fmt.Println(email) // support@example.com


2.2. 查找所有匹配项

re := regexp.MustCompile(`\\d{4}`)numbers := re.FindAllString("验证码:1234, 5678, 9012", -1)fmt.Println(numbers) // [1234 5678 9012]

FindAllString 的第二个参数是最大匹配次数。-1 表示“全部”。



2.3. 捕获组(子匹配)

捕获组允许提取匹配结果的特定部分。它们通过圆括号 () 定义。

re := regexp.MustCompile(`(\\w+)@(\\w+\\.\\w+)`)match := re.FindStringSubmatch("user@example.com")fmt.Println(match) // [user@example.com user example.com]// match[0] — 完整匹配// match[1] — 第一组 (user)// match[2] — 第二组 (example.com)


3. 使用正则表达式进行文本替换

regexp 包提供了两个主要的替换方法:

  • ReplaceAllString(src, repl) — 使用字符串 repl 替换所有匹配项。
  • ReplaceAllStringFunc(src, replFunc) — 使用回调函数依次替换每个匹配项。


3.1. 简单替换

re := regexp.MustCompile(`\\s+`)result := re.ReplaceAllString("很多   空格   在这里", " ")fmt.Println(result) // "很多 空格 在这里"


3.2. 使用捕获组进行替换

在替换字符串中,可以使用 $1、$2 等引用捕获组。

re := regexp.MustCompile(`(\\w+)\\s+(\\w+)`)result := re.ReplaceAllString("张 三", "$2, $1")                

博客

书籍推荐