regexp 基础
编译并匹配模式
regexp 基础 是 CoddyKit 上的免费 Go Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Go Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Go Academy 课程共包含 4 节课。
什么是正则表达式
正则表达式(regexp)是一种描述字符串集合的模式。Go 通过 regexp 软件包提供正则表达式。
它们非常适合验证和搜索文本。
package main
import (
"fmt"
"regexp"
)
func main() {
matched, _ := regexp.MatchString("go+", "gooo")
fmt.Println(matched)
}使用 MatchString 快速匹配
regexp.MatchString(pattern, s) 会报告模式是否出现在 s 的任意位置。它返回一个布尔值和一个错误。
package main
import (
"fmt"
"regexp"
)
func main() {
ok, _ := regexp.MatchString("cat", "the cat sat")
fmt.Println(ok)
}编译模式
如果需要重复使用,请使用 regexp.Compile 编译一次。它会返回一个可重复使用的 *regexp.Regexp,如果模式无效则返回错误。
package main
import (
"fmt"
"regexp"
)
func main() {
re, err := regexp.Compile("[0-9]+")
fmt.Println(re.MatchString("abc123"), err)
}使用 MustCompile 处理常量
如果模式无效,regexp.MustCompile 会引发恐慌。请将它用于编译时已知的固定模式,通常是软件包级变量。
package main
import (
"fmt"
"regexp"
)
var digits = regexp.MustCompile("[0-9]+")
func main() {
fmt.Println(digits.MatchString("order 42"))
}字符类
方括号定义允许使用的字符集合。[aeiou] 可匹配任意元音;[a-z] 等范围可匹配一个字符区间。
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile("[a-z]+")
fmt.Println(re.MatchString("Hello"))
}预定义字符类
快捷方式让常见集合更易使用:\d 表示一个数字,\w 表示一个单词字符,\s 表示空白字符。在 Go 字符串中,请转义反斜杠。
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile("\\d+")
fmt.Println(re.MatchString("abc 99"))
}量词
量词表示重复次数:
*表示零次或多次,+表示一次或多次,?表示零次或一次,{2,4}表示一个范围。
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile("a{2,3}")
fmt.Println(re.MatchString("aaa"))
fmt.Println(re.MatchString("a"))
}锚点
锚点会固定匹配位置:^ 表示文本开头,$ 表示文本结尾。将二者结合使用可要求整个字符串都匹配。
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile("^go$")
fmt.Println(re.MatchString("go"))
fmt.Println(re.MatchString("going"))
}交替与分组
竖线 | 表示 OR,括号用于将各个部分组合在一起。(cat|dog)s? 可以匹配 cat、cats、dog 或 dogs。
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile("(cat|dog)s?")
fmt.Println(re.MatchString("dogs"))
}验证格式
带锚点的模式可以用于验证器。这里将检查一种简单的 ZIP 样式代码:只能包含数字,且必须正好包含五位数字。
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile("^\\d{5}$")
fmt.Println(re.MatchString("12345"))
fmt.Println(re.MatchString("123"))
}匹配字节
方法有字符串形式和字节切片形式。Match 作用于 []byte,功能对应于 MatchString。
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile("[0-9]+")
fmt.Println(re.Match([]byte("id7")))
}快速检查
哪个函数在模式无效时会引发恐慌,并且最适合固定模式?
回顾:正则表达式基础
您已经学习了基础知识:
- 使用
MatchString快速匹配;使用Compile或MustCompile编译。 - 使用字符类、量词、锚点和分组构建模式。
- 使用
^和$设置锚点,以验证整个字符串。
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile("^[a-z]+@[a-z]+$")
fmt.Println(re.MatchString("hi@host"))
}常见问题解答
「regexp 基础」课时是免费的吗?
是的 — 「regexp 基础」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Go Academy 课程的其余内容,请升级到 CoddyKit PRO。 Go Academy 课程共包含 4 节课。
「regexp 基础」这节课中我会学到什么?
编译并匹配模式 你通过在浏览器中直接运行的动手代码来练习 Go Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Go Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Go Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「regexp 基础」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Go Academy 课中编写并运行代码吗?
能。每节 Go Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。