Lookahead 和 Lookbehind 正则表达式

问题描述

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

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

我让它适用于所有其他口味,但不适用于 Go。

https://regex101.com/r/74RITp/4

解决方法

您可以使用以下方法完全移除环视并依赖捕获机制:

/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"