为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 Regexp.ReplaceAllString 会转义替换字符串中的某些字符?

为什么 Regexp.ReplaceAllString 会转义替换字符串中的某些字符?

Go
弑天下 2022-06-27 10:12:34
使用以下代码:package mainimport (    "regexp")var namedMatch = regexp.MustCompile("\\{([^}]+)\\}")func main() {    example := regexp.QuoteMeta("/book/{author-id}/{book-id}")    new_path := namedMatch.ReplaceAllString(example, `(?P<$1>[^/]+)`)    regexp.MustCompile(new_path)}我们得到以下恐慌:panic: regexp: Compile(`/book/\(?P<author-id\>[^/]+)/\(?P<book-id\>[^/]+)`): error parsing regexp: unexpected ): `/book/\(?P<author-id\>[^/]+)/\(?P<book-id\>[^/]+)`goroutine 1 [running]:regexp.MustCompile(0xc000110040, 0x31, 0x1f)    /usr/local/go-faketime/src/regexp/regexp.go:311 +0x157main.main()    /tmp/sandbox229373954/prog.go:13 +0x8b为什么替换字符串会像\(?P<author-id\>[^/]+)这样\(?P<book-id\>[^/]+)被转义?不应该Regexp按原样放置字符串吗?我该如何解决这个问题才能在替换中使用有效的正则表达式?
查看完整描述

1 回答

?
jeck猫

TA贡献1909条经验 获得超7个赞

原来正则表达式是错误的。代替:

var namedMatch = regexp.MustCompile("\\{([^}]+)\\}")

它应该是:

var namedMatch = regexp.MustCompile("\\\\{([^}]+)\\\\}")

因此正则表达式将正确替换转义的花键。


查看完整回答
反对 回复 2022-06-27
  • 1 回答
  • 0 关注
  • 136 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信