使用以下代碼: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("\\\\{([^}]+)\\\\}")
因此正則表達式將正確替換轉義的花鍵。
- 1 回答
- 0 關注
- 166 瀏覽
添加回答
舉報
0/150
提交
取消