我卡住了,不明白为什么会出问题。它应该匹配“-_”的正则表达式并替换为“%/”。
package main
import (
"fmt"
"regexp"
)
func main() {
rewrittenUrl := "https://rewriteurls.com/v2/url?u=https-3A__www.youtube.com_watch-3Fv-3D4RkZAfD-2JHeM&d=DwMFaQ&c=SiTLKJfsN-8Sb-MxLIXcbA&r=LqnK821DYMk9rZdGgNQw73sPqZUvbX2xxnSU9Ro3lk8&m=Qq7De43ipEDY9RFTKIoH6VpjqxPwG1AHvfT51Oh-Sw4&s=2fNNjfWFIBBgYVuwxvVOAabxmcBqWXfzvQgU7zxduxg&e="
r, _ := regexp.Compile("u=(.+?)&[dc]=")
m := r.FindString(rewrittenUrl)
// Will print u=https-3A__www.youtube.com_watch-3Fv-3D4RkZAfD-2DHeM&d=
fmt.Print(m)
// This attempt did not work either...
// res := strings.Replace(m, "-_", "%/", 1)
fmt.Println(m)
// TO DO
// match in out '-_', '%/'
r2, _ := regexp.Compile("(-_)")
// Desired outcome u=https%3A//www.youtube.com/watch%3Fv%3D4RkZAfD%2DHeM&d=
fmt.Printf("%q\n", r2.ReplaceAllString(m, "%/"))
}
最佳答案
第一部分显然按预期工作,所以您实际上要问的是如何转换字符串,例如:
"u=https-3A__www.youtube.com_watch-3Fv-3D4RkZAfD-2JHeM&d="
变成像这样的字符串:
"u=https%3A//www.youtube.com/watch%3Fv%3D4RkZAfD%2JHeM&d="
这很简单,不需要正则表达式...
m2 := strings.Replace(m, "-", "%", -1)
m2 = strings.Replace(m2, "_", "/", -1)
desired := "u=https%3A//www.youtube.com/watch%3Fv%3D4RkZAfD%2JHeM&d="
if m2 == desired {
fmt.Printf(" success: %q\n", m2)
} else {
fmt.Println("fail!")
}
关于regex - 为什么我的正则表达式不匹配并替换字符串以将 urlencode 转换为新字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53106258/