要提高 RAM 和 CPU 使用率,而无需在循环内调用匿名函数,也无需使用“append”函数在循环内复制内存中的数组,请参见下一个示例:
您可以使用多行文本存储多个子组,无需在字符串中附加“+”,也无需在 for 循环中使用 for 循环(如此处发布的其他示例)。
txt := `2001-01-20
2009-03-22
2018-02-25
2018-06-07`
regex := *regexp.MustCompile(`(?s)(\d{4})-(\d{2})-(\d{2})`)
res := regex.FindAllStringSubmatch(txt, -1)
for i := range res {
//like Java: match.group(1), match.gropu(2), etc
fmt.Printf("year: %s, month: %s, day: %s\n", res[i][1], res[i][2], res[i][3])
}
输出:
year: 2001, month: 01, day: 20
year: 2009, month: 03, day: 22
year: 2018, month: 02, day: 25
year: 2018, month: 06, day: 07
注意: res[i][0] =~ match.group(0) Java
如果要存储此信息,请使用结构类型:
type date struct {
y,m,d int
}
...
func main() {
...
dates := make([]date, 0, len(res))
for ... {
dates[index] = date{y: res[index][1], m: res[index][2], d: res[index][3]}
}
}
最好使用匿名组(性能提升)
使用在 Github 上发布的“ReplaceAllGroupFunc”是个坏主意,因为:
- 正在使用循环内循环
- 在循环内使用匿名函数调用
- 有很多代码
- 在循环内使用“追加”函数,这很糟糕。每次调用“附加”函数时,都会将数组复制到新的内存位置