为了账号安全,请及时绑定邮箱和手机立即绑定

如何从markdown中提取链接

如何从markdown中提取链接

Go
至尊宝的传说 2022-05-18 15:52:56
我正在尝试解析可能是超链接或降价中的超链接的输入。我可以很容易地检查它是否是一个超链接^https?://.+$并使用 regexp.Match,但是对于降价链接,它对我来说是一个完全不同的兔子洞。我遇到了这个正则表达式^\[([\w\s\d]+)\]\((https?:\/\/[\w\d./?=#]+)\)$,我试图修改它以仅匹配降价链接,但是在由于某种原因捕获了最后一个括号之后,我一直在寻找仅匹配第二个捕获组,链接,与 SubexpNames,FindStringIndex 之类的东西, FindSubmatch, Split 等等,但它们似乎都没有捕捉到我正在寻找的东西(有时它们无论如何都会返回整个字符串)或者很可能我做错了。这就是我要找的东西:Input - [  Should output the link - https://imgur.com/bcd到目前为止,这是我的代码:https: //play.golang.org/p/OiJE3TvvVb6
查看完整描述

1 回答

?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

您可以使用regexp.FindStringSubmatch获取由您的单 URL 验证正则表达式产生的捕获值:


package main


import (

    "fmt"

    "regexp"

)


func main() {

    markdownRegex := regexp.MustCompile(`^\[[^][]+]\((https?://[^()]+)\)$`)

    results := markdownRegex.FindStringSubmatch("[https://imgur.com/abc](https://imgur.com/bcd)")

    fmt.Printf("%q", results[1])

}


您可以考虑使用regexp.FindAllStringSubmatch来查找您需要的所有链接:


package main


import (

    "fmt"

    "regexp"

)


func main() {

    markdownRegex := regexp.MustCompile(`\[[^][]+]\((https?://[^()]+)\)`)

    results := markdownRegex.FindAllStringSubmatch("[https://imgur.com/abc](https://imgur.com/bcd) and [https://imgur.com/xyy](https://imgur.com/xyz)", -1)

    for v := range results {fmt.Printf("%q\n", results[v][1])}

}

图案的意思是:

  • \[- 一个[字符

  • [^][]+- 1+ 字符以外的[]

  • ]\(](子串

  • (https?://[^()]+) - 第 1 组:http,然后是可选的s,然后是 子字符串,然后是除and之外的://1+ 个字符()

  • \)- 一个)字符。

请参阅在线正则表达式演示


查看完整回答
反对 回复 2022-05-18
  • 1 回答
  • 0 关注
  • 114 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信