Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
golang regexp ReplaceAllStrings和backreference不能很好地工作_Regex_Go - Fatal编程技术网

golang regexp ReplaceAllStrings和backreference不能很好地工作

golang regexp ReplaceAllStrings和backreference不能很好地工作,regex,go,Regex,Go,试着在单词的开头大写每个字母。我知道有字符串。标题,但这对我来说太不精确了 我不确定这为什么不起作用: package main import ( "fmt" "regexp" "strings" ) func main() { re := regexp.MustCompile(`\b([a-z])`) fmt.Println(re.ReplaceAllString("my test string", strings.ToUpper("$1")))

试着在单词的开头大写每个字母。我知道有字符串。标题,但这对我来说太不精确了

我不确定这为什么不起作用:

package main

import (
    "fmt"
    "regexp"
    "strings"
)

func main() {
    re := regexp.MustCompile(`\b([a-z])`)
    fmt.Println(re.ReplaceAllString("my test string", strings.ToUpper("$1")))

}
您应该使用ReplaceAllStringFunc,例如:

re.ReplaceAllStringFunc("my test string", func(s string) string {
                                          return strings.ToUpper(s)})
见工作

您的代码不起作用,因为:

re.ReplaceAllString("my test string", strings.ToUpper("$1"))
同:

re.ReplaceAllString("my test string", "$1")

由于$1的大写字母仍然是$1。

go regexp包和RE2不支持反向引用。@DaveC是的,它将使John的书成为John的书,使用正则表达式,即使在像go这样有限的支持下,您也可以避免这种行为,在这种情况下,类似这样的东西将起作用[^']\b[a-z]。@Mikelemin-将其编辑为不精确,这似乎更接近你所描述的意思-希望你能理解你想说的