基本语法:
可以参考:正则表达式语法
*
:零次或多次
+
:一次或多次
.
:任意字符
# 简单匹配的实例代码
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) | |
} | |
} |
注意由于 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