← Backend / Go / 基础专题

26_正则表达式与文本处理

编译正则并提取简单格式,同时知道普通字符串函数更合适的情况。

Go 基础专题 26:正则表达式与文本处理

学习目标:编译正则并提取简单格式,同时知道普通字符串函数更合适的情况。

核心知识

标准库 regexp 使用 RE2 风格正则,适合验证或提取有明确模式的文本。regexp.Compile 返回编译错误,外部提供的模式应处理错误;固定且可信的模式可用 regexp.MustCompile,但无效模式会 panic。匹配前先定义边界:是检查整段文本,还是只找其中一部分。

package main

import (
    "fmt"
    "regexp"
)

func main() {
    pattern := regexp.MustCompile(`^[a-z][a-z0-9_]{2,15}$`)
    fmt.Println(pattern.MatchString("go_123"))
    fmt.Println(pattern.MatchString("1bad"))
}

^ 与 $ 在这里把匹配限制为整串;[a-z] 表示一个小写英文字母,{2,15} 表示前一部分重复次数。原始字符串反引号可减少反斜杠转义。只检查前缀、后缀或分割固定分隔符时,strings.HasPrefix、strings.HasSuffix、strings.Split 更直观。

正则不适合完整解析任意 HTML、URL 或复杂日期;这些格式有专用解析器。用户可见的字符类别与 Unicode 码点不同,ASCII 范围的模式不会匹配所有语言文字。

逐步理解

逐段解读规则:^ 锚定开头,第一组要求首字符是字母,第二组允许字母、数字、下划线重复 2 到 15 次,$ 锚定结尾,所以总长度为 3 到 16 个 ASCII 字符。测试应包含最短、最长、超长、非法首字符以及非 ASCII 输入。用户可配置正则时要处理编译错误。

动手练习

练习:让上述规则接受大写字母。答案要点:把字母范围扩成 [a-zA-Z],并检查首字符与后续字符类。