亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么 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 關注
  • 166 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號