基本语法:

可以参考:正则表达式语法

* :零次或多次

+ :一次或多次

. :任意字符

# 简单匹配的实例代码

package main
import (
	"fmt"
	"log"
	"regexp"
)
func main() {
	r, err := regexp.Compile(`<.+?>`) // ? 表示最短匹配
	errDeal(err)
	str := "hello<35武大>445><sg34>gworld"
	fmt.Printf("str[5:15]: %v\n", str[5:15])
	s := r.FindAllString(str, -1) // 匹配多个,并且返回一个匹配成功字符串数组
	i := r.FindAllStringIndex(str,-1) // 返回匹配子串开始和结束的索引
	s2 := r.ReplaceAllString(str, "*") // 替换匹配的地方
	fmt.Printf("s2: %v\n", s2)
	fmt.Printf("s: %v\n", s)
	fmt.Printf("i: %v\n", i)
}
func errDeal(err error){
	if err !=nil{
		log.Fatal(err)
	}
}

image-20220122161126211

注意由于 golang 中的中文是使用了 3 个 byte 来存储,而 string 的索引是字节索引。

# strings 中的 spilt

package main
import (
	"fmt"
	"strings"
)
func main() {
	s := "I_Love_Go_Web"
	res := strings.Split(s, "_")
	for i := range res {
		fmt.Println(res[i])
	}
	res1 := strings.SplitN(s, "_", 2)
	for i := range res1 {
		fmt.Println(res1[i])
	}
	res2 := strings.SplitAfter(s, "_")
	for i := range res2 {
		fmt.Println(res2[i])
	}
	res3 := strings.SplitAfterN(s, "_", 2)
	for i := range res3 {
		fmt.Println(res3[i])
	}
}

splitAfter 会保留 sep

image-20220122162108149

更新于

请我喝[茶]~( ̄▽ ̄)~*

Kalice 微信支付

微信支付

Kalice 支付宝

支付宝