前瞻和后视正则表达式

Lookahead and Lookbehind regex

所以我有这个正则表达式:(?:\/p\/|$)(?:[^\/]*)(?<=-)(.*)(?=\/)

我希望它能从宜家链接中提取 id,但它似乎不适用于 Go。任何人都可以帮我吗?或者有没有工具可以转换它?

我让它可以与所有其他版本一起使用,但不能与 Go 一起使用。

https://regex101.com/r/74RITp/4 <-- 这里有例子

您可以完全删除 lookarounds 并依赖捕获机制使用:

/p/[^/]*-([^/]*)/

regex demo。请注意,前导和尾随 / 是字符串模式的一部分。 详情:

  • /p/ - /p/ 字符串
  • [^/]* - /
  • 以外的零个或多个字符
  • - - 一个连字符
  • ([^/]*) - 第 1 组:除 /
  • 之外的零个或多个字符
  • / - 一个 / 字符。

参见 Golang demo:

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"