我不熟悉类似 C 的语法,想编写代码来查找和替换源字符串中的所有“A”到“B”,比如使用 Regexp 包 ReplaceAll 或 ReplaceAllString 函数的“ABBA”?如何设置类型 Regexp、src 和 repl?这是 Go 文档中的 ReplaceAll代码片段:
// ReplaceAll 返回 src 的副本,其中所有匹配正则表达式
// 已经被repl替换了。不支持表达式
//(例如 \1 或 $1)在替换文本中。
func (re *Regexp) ReplaceAll(src, repl []byte) []byte {
最后匹配结束:= 0;// 最近匹配的结束位置
搜索位置:= 0;// 我们下一次寻找匹配的位置
buf := new(bytes.Buffer);
对于 searchPos <= len(src) {
a := re.doExecute("", src, searchPos);
如果 len(a) == 0 {
break // 不再匹配
}
// Copy the unmatched characters before this match.
buf.Write(src[lastMatchEnd:a[0]]);
// Now insert a copy of the replacement string, but not for a
// match of the empty string immediately after another match.
// (Otherwise, we get double replacement for patterns that
// match both empty and nonempty strings.)
if a[1] > lastMatchEnd || a[0] == 0 {
buf.Write(repl)
}
lastMatchEnd = a[1];
// Advance past this match; always advance at least one character.
_, width := utf8.DecodeRune(src[searchPos:len(src)]);
if searchPos+width > a[1] {
searchPos += width
} else if searchPos+1 > a[1] {
// This clause is only needed at the end of the input
// string. In that case, DecodeRuneInString returns width=0.
searchPos++
} else {
searchPos = a[1]
}
}
// Copy the unmatched characters after the last match.
buf.Write(src[lastMatchEnd:len(src)]);
return buf.Bytes();
}