gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 21:12:25 27 4
gpt4 key购买 nike

使用以下代码:

package main

import (
"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)
}
Playground
我们得到以下 panic :
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 +0x157
main.main()
/tmp/sandbox229373954/prog.go:13 +0x8b
为什么替换字符串 \(?P<author-id\>[^/]+)\(?P<book-id\>[^/]+)就这样逃脱?不应该 Regexp按原样放置字符串?我该如何解决这个问题才能在替换中使用有效的正则表达式?

最佳答案

感谢@zerkms,原来正则表达式是错误的。代替:

var namedMatch = regexp.MustCompile("\\{([^}]+)\\}")
它应该是:
var namedMatch = regexp.MustCompile("\\\\{([^}]+)\\\\}")
因此正则表达式将正确替换转义的花键。

关于go - 为什么 Regexp.ReplaceAllString 会转义替换字符串中的某些字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63516937/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com