47-regular-expressions

// Go内置支持正则表达式

package main

import (
	"bytes"
	"fmt"
	"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"))                   // 返回整个匹配模式和子匹配的信息,如p([a-z]+)ch和([a-z]+)
	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")) // 以字节形式匹配正则表达式

	// 使用正则表达式常见常量时,可以使用Compile的变体MustCompile
	// 普通的Compile不适用于常量,因为它有2个返回值
	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))
}
上次修改: 10 January 2020