3 回答

TA貢獻(xiàn)1773條經(jīng)驗(yàn) 獲得超3個(gè)贊
您顯示的示例字符串是普通的 HTTPS URL,因此您可以使用該net/url包來解析它們。是website-name的第一部分parsedUrl.Hostname(),resourceId是parsedUrl.Path較少的前導(dǎo)部分/。
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有一個(gè)完整的示例,包括問題中的兩個(gè) URL 字符串。即使 URL 的主機(jī)名部分不以 結(jié)尾.com,或者路徑部分包含該字符串,或者存在端口號或哈希片段或其他變體,此方法也有效。

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超5個(gè)贊
我猜這個(gè)表達(dá)式可能有效:
(?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貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超9個(gè)贊
也許像這樣簡單的事情會有幫助。
您可以使用以下正則表達(dá)式提取網(wǎng)站名稱并返回第一組:
//([^/.]+)
// start with //
([^/.]+) match anything until first dot
您可以使用以下正則表達(dá)式提取resourceId并返回第一組:
.com/([^/?]+)
.com/ start with .com
([^/?]+) match everything until the first ? (if exists, else matches till end)
- 3 回答
- 0 關(guān)注
- 161 瀏覽
添加回答
舉報(bào)