Golang正则表达式替换行为

Golang正则表达式替换行为,go,regexp-replace,Go,Regexp Replace,我在Go中有一个简单的正则表达式,在使用ReplaceAllString函数时注意到一个奇怪的行为 package main import ( "fmt" "regexp" ) func main() { var re = regexp.MustCompile("(.*)(b.*)") fmt.Println(re.ReplaceAllString("abc", "$1,

我在Go中有一个简单的正则表达式,在使用ReplaceAllString函数时注意到一个奇怪的行为

package main

import (
    "fmt"
    "regexp"
)

func main() {
    var re = regexp.MustCompile("(.*)(b.*)")
    fmt.Println(re.ReplaceAllString("abc", "$1,d"))
    fmt.Println(re.ReplaceAllString("abc", "$1d"))
    fmt.Println(re.ReplaceAllString("abc", "$1d.f"))
    fmt.Println(re.ReplaceAllString("abc", "$1 d"))
}

我期待这样的事情

a,d
ad
ad.f
a d
但实际结果是

a,d

.f
a d
我在上测试了regex,发现问题出在我的tokenreplace语句上。但我并不完全理解根本问题


我是否错误地使用了$符号?如何调整替换字符串以获得预期/期望的输出?

问题是1后面的d。您应该用花括号将组号括起来:

package main

import (
    "fmt"
    "regexp"
)

func main() {
    var re = regexp.MustCompile("(.*)(b.*)")
    fmt.Println(re.ReplaceAllString("abc", "${1},d"))
    fmt.Println(re.ReplaceAllString("abc", "${1}d"))
    fmt.Println(re.ReplaceAllString("abc", "${1}d.f"))
    fmt.Println(re.ReplaceAllString("abc", "${1} d"))
}
否则,该组将扩展到1d,该组不是有效组,并返回空表达式