此问题已在此处有答案:
Regular expression works on regex101.com, but not on prod(1个答案)
3天前关闭。
我有两个网址,我想从他们匹配的具体部分。但结果matchList为nil。
func ParseVideoSubAppIdFileId(videoUrl string) (subAppId string, fileId string, err error) {
pattern := `/^(https?)://(\d+)[\w\.]+.com/\w+/(\w+)/`
reg, err := regexp.Compile(pattern)
if err != nil {
return "", "", err
}
matchList := reg.FindStringSubmatch(videoUrl)
if len(matchList) != 3 {
return "", "", nil
}
return matchList[1], matchList[2], err
}
func Test1(t *testing.T) {
appId, fid, err := ParseVideoSubAppIdFileId("https://1251001049.vod2.myqcloud.com/3e9ac59evodtransgzp1251001049/21716792387702294712952810/adp.1434753.m3u8")
fmt.Println(appId, fid, err)
appId, fid, err = ParseVideoSubAppIdFileId("http://1251001049.vod2.myqcloud.com/8a7322f6vodgzp1251001049/64f65a71387702295105913734/iA9uSXqujDIA.mp4")
fmt.Println(appId, fid, err)
}
我想从第一个网址匹配1251001049
21716792387702294712952810
。
并匹配第二个url中的1251001049
64f65a71387702295105913734
。但是matchList是nil。
1条答案
按热度按时间u1ehiz5o1#
Golang正则表达式的语法与JavaScript有一点点不同。你正在用
forward slash (/)
封装正则表达式,这在golang中是不需要的。而是像这样使用:^(https?)://(\d+)[\w\.]+.com/\w+/(\w+)
。