问题描述
所以我有这个正则表达式:(?:\/p\/|$)(?:[^\/]*)(?<=-)(.*)(?=\/)
我希望它从宜家链接中提取 id,但它似乎不适用于 Go。任何人都可以帮助我吗?或者有什么工具可以转换它?
我让它适用于所有其他口味,但不适用于 Go。
https://regex101.com/r/74RITp/4
解决方法
您可以使用以下方法完全移除环视并依赖捕获机制:
/p/[^/]*-([^/]*)/
参见regex demo。请注意前导和尾随 /
是字符串模式的一部分。 详情:
-
/p/
-/p/
字符串 -
[^/]*
- 除/
之外的零个或多个字符 -
-
- 连字符 -
([^/]*)
- 第 1 组:除/
之外的零个或多个字符 -
/
- 一个/
字符。
package main
import (
"fmt"
"regexp"
)
func main() {
s := `https://www.ikea.com/de/de/p/symfonisk-tischleuchte-mit-wifi-speaker-weiss-30435157/?tduid=d8b332c221610a36288c647f8959959f&utm_medium=affiliate&utm_name=generic&utm_term=conversion&utm_content=deeplink&utm_source=SmartApfel`
regex := regexp.MustCompile(`/p/[^/]*-([^/]*)/`)
fmt.Printf("%#v\n",regex.FindStringSubmatch(s)[1])
}
输出:"30435157"