regex - 为什么我的正则表达式不匹配并替换字符串以将 urlencode 转换为新字符串?

标签 regex go

我卡住了,不明白为什么会出问题。它应该匹配“-_”的正则表达式并替换为“%/”。

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!")
}

它正在运行:https://play.golang.org/p/yWCJz7jTw2l

关于regex - 为什么我的正则表达式不匹配并替换字符串以将 urlencode 转换为新字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53106258/

相关文章:

postgresql - 如何使 Buffalo 事务中间件提交?

go - 卡夫卡中没有匹配的监听器错误的领导经纪人

regex - 正则表达式全部使用 pig 提取

regex - 美国电话号码验证

java - 正则表达式提取值

regex - 正则表达式非捕获组字符长度

json - 如何在对象具有字符串键的 Golang 中解码 JSON

javascript - 如何在空格而不是引号之间拆分?

google-app-engine - 适用于Google AppEngine Go的Cloud IDE

google-app-engine - Google App Engine 内存缓存安全吗?