3 回答
TA贡献1773条经验 获得超3个赞
您显示的示例字符串是普通的 HTTPS URL,因此您可以使用该net/url包来解析它们。是website-name的第一部分parsedUrl.Hostname(),resourceId是parsedUrl.Path较少的前导部分/。
u, err := url.Parse(s)
if err != nil {
panic(err)
}
host := u.Hostname()
first := strings.SplitN(host, ".", 2)[0]
fmt.Printf("website-name: %s\n", first)
fmt.Printf("resourceId: %s\n", u.Path[1:])
https://play.golang.org/p/fnF2RTBuFxR有一个完整的示例,包括问题中的两个 URL 字符串。即使 URL 的主机名部分不以 结尾.com,或者路径部分包含该字符串,或者存在端口号或哈希片段或其他变体,此方法也有效。
TA贡献1772条经验 获得超5个赞
我猜这个表达式可能有效:
(?i)https?:\/\/(www\.)?([^.]*)[^\/]*\/([^?\r\n]*)
测试
package main
import (
"regexp"
"fmt"
)
func main() {
var re = regexp.MustCompile(`(?m)(?i)https?:\/\/(www\.)?([^.]*)[^\/]*\/([^?\r\n]*)`)
var str = `https://website-name.some-domain.some-sub-domain.com/resourceId?randomContent
https://website-name.some-domain.some-sub-domain.com/resourceId`
for i, match := range re.FindAllString(str, -1) {
fmt.Println(match, "found at index", i)
}
}
演示
TA贡献1799条经验 获得超9个赞
也许像这样简单的事情会有帮助。
您可以使用以下正则表达式提取网站名称并返回第一组:
//([^/.]+)
// start with //
([^/.]+) match anything until first dot
您可以使用以下正则表达式提取resourceId并返回第一组:
.com/([^/?]+)
.com/ start with .com
([^/?]+) match everything until the first ? (if exists, else matches till end)
- 3 回答
- 0 关注
- 103 浏览
添加回答
举报