**众所周知,golang的正则表达式是不支持反向引用的,有没有谁搞过这一块?有没有一个比较好的替代方案?**
《精通正则表达式》里说到反向引用包括在正则里引用捕获和在正则外(替换字符串)引用捕获,
目前golang是只提供了正则外的反向引用没提供正则内的反向引用?如果有的话告诉我语法。
顺道一提,只有Python正则外引用捕获是用\1,Java、Perl、Go等一般语言都是用$1。
```golang
r := regexp.MustCompile(`(.)2\1`)
s := r.ReplaceAllString(`b2b`, `s\1$1`)
fmt.Println(s)
编译报错
panic: regexp: Compile(`(.)2\1`): error parsing regexp: invalid escape sequence: `\1`
```
Java(仅支持\1不支持\g{1})、Python、Perl都支持的
https://docs.python.org/zh-cn/3/library/re.html#contents-of-module-re
https://docs.oracle.com/en/java/javase/12/docs/api/java.base/java/util/regex/Pattern.html
#9
更多评论
谁说不支持反向引用?还众所周知?
package main
import (
"regexp"
"fmt"
)
func main() {
re := regexp.MustCompile("([0-9]+)年([0-9]+)月([0-9]+)日")
fmt.Println(re.ReplaceAllString("2013年9月30日", "$1-$2-$3"))
}
输出结果:
2013-9-30
注:一般的语言用的是 \1 这种形式反向引用
#1