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.ReplaceAllString忽略替换字符串"$";_Go - Fatal编程技术网

Golang regexp.ReplaceAllString忽略替换字符串"$";

Golang regexp.ReplaceAllString忽略替换字符串"$";,go,Go,我试图用我找到的正则表达式把CamelCase转换成snake_。下面是我正在使用的代码片段: in := "camelCase" var re1 = regexp.MustCompile(`(.)([A-Z][a-z]+)`) out := re1.ReplaceAllString(in, "$1_$2") 正则表达式将匹配lCase$1这里是l,$2是大小写,因此使用替换字符串“$1\u$2”应该会导致驼峰大小写。相反,它会导致出现cameCase 将替换字符串更改为“$1”将导致出现。如

我试图用我找到的正则表达式把CamelCase转换成snake_。下面是我正在使用的代码片段:

in := "camelCase"
var re1 = regexp.MustCompile(`(.)([A-Z][a-z]+)`)
out := re1.ReplaceAllString(in, "$1_$2")
正则表达式将匹配
lCase
$1
这里是
l
$2
大小写
,因此使用替换字符串
“$1\u$2”
应该会导致
驼峰大小写
。相反,它会导致出现
cameCase

将替换字符串更改为
“$1”
将导致
出现
。如果我将其更改为
“$1+$2”
,结果将是
camel+Case
,正如预期的那样()


现在,我的解决方法是使用
“$1+$2”
作为替换字符串,然后使用
字符串。替换
将加号更改为下划线。这是一个bug还是我做错了什么?

修复方法是使用
${1}{2
(或者
${1}{2}
对称)

Per(我的重点):

在模板中,变量由表单的子字符串表示 $name或${name},其中name是非空的字母序列, 数字、和下划线

在$name表单中,name被带到 尽可能长:$1x相当于${1x},而不是${1}x,并且, $10相当于${10},而不是${1}0

因此,在
$1\u$2
中,您实际上是在寻找一个名为
1
的组,然后是另一个名为
2
的组,并将它们放在一起

至于为什么使用
$1_$2
(或
$foo$2
)会导致“cameCase”,同一文档中说:

对超出范围或不匹配的索引或名称的引用 正则表达式中不存在的将替换为空切片

因此,用
“$1\u$2”
替换等同于仅用
“$2”
替换