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],并检查首字符与后续字符类。