FindStringSubmatch 是否分配内存?

问题描述 投票:0回答:1

传递给 regexp.FindStringSubmatch 的字符串内存是否与返回切片中的字符串共享?

go
1个回答
0
投票

src/regexp/regexp.go
第1044~1057行,该函数创建一个切片,其元素是原始字符串的切片。而 go 中的 slice 只是对一系列数据的引用,因此
ret
实际上与原始
s
共享内存。

func (re *Regexp) FindStringSubmatch(s string) []string {
    var dstCap [4]int
    a := re.doExecute(nil, nil, s, 0, re.prog.NumCap, dstCap[:0])
    if a == nil {
        return nil
    }
    ret := make([]string, 1+re.numSubexp)
    for i := range ret {
        if 2*i < len(a) && a[2*i] >= 0 {
            ret[i] = s[a[2*i]:a[2*i+1]]
        }
    }
    return ret
}

但是,字符串在 golang 中是不可变的,因此该函数不会导致问题。

© www.soinside.com 2019 - 2024. All rights reserved.