Go 提供内置的正则表达式。这里是 Go 中基本的正则相关功能的例子。 |
|
package main
|
|
import "bytes"
import "fmt"
import "regexp"
|
|
func main() {
|
|
这个测试一个字符串是否符合一个表达式。 |
match, _ := regexp.MatchString("p([a-z]+)ch", "peach")
fmt.Println(match)
|
上面我们是直接使用字符串,但是对于一些其他的正则任务,你需要 |
r, _ := regexp.Compile("p([a-z]+)ch")
|
这个结构体有很多方法。这里是类似我们前面看到的一个匹配测试。 |
fmt.Println(r.MatchString("peach"))
|
这是查找匹配字符串的。 |
fmt.Println(r.FindString("peach punch"))
|
这个也是查找第一次匹配的字符串的,但是返回的匹配开始和结束位置索引,而不是匹配的内容。 |
fmt.Println(r.FindStringIndex("peach punch"))
|
|
fmt.Println(r.FindStringSubmatch("peach punch"))
|
类似的,这个会返回完全匹配和局部匹配的索引位置。 |
fmt.Println(r.FindStringSubmatchIndex("peach punch"))
|
带 |
fmt.Println(r.FindAllString("peach punch pinch", -1))
|
|
fmt.Println(r.FindAllStringSubmatchIndex(
"peach punch pinch", -1))
|
这个函数提供一个正整数来限制匹配次数。 |
fmt.Println(r.FindAllString("peach punch pinch", 2))
|
上面的例子中,我们使用了字符串作为参数,并使用了如 |
fmt.Println(r.Match([]byte("peach")))
|
创建正则表示式常量时,可以使用 |
r = regexp.MustCompile("p([a-z]+)ch")
fmt.Println(r)
|
|
fmt.Println(r.ReplaceAllString("a peach", "<fruit>"))
|
|
in := []byte("a peach")
out := r.ReplaceAllFunc(in, bytes.ToUpper)
fmt.Println(string(out))
}
|
$ go run regular-expressions.go
true
true
peach
[0 5]
[peach ea]
[0 5 1 3]
[peach punch pinch]
[[0 5 1 3] [6 11 7 9] [12 17 13 15]]
[peach punch]
true
p([a-z]+)ch
a <fruit>
a PEACH
|
|
完整的 Go 正则表达式参考,请查阅 |
下一个例子: JSON.