gpt4 book ai didi

regex - 编写没有否定的正则表达式

转载 作者:IT王子 更新时间:2023-10-29 01:36:28 26 4
gpt4 key购买 nike

在之前的post我已经寻求一些帮助来重写一个没有否定的正则表达式

开始正则表达式:

https?:\/\/(?:.(?!https?:\/\/))+$

结束于:

https?:[^:]*$

这工作正常,但我注意到,如果我的 URL 中除了来自 http\s 的 : 之外还有 :,它不会选择。

这是一个不起作用的字符串:

sometextsometexhttp://websites.com/path/subpath/#query1sometexthttp://websites.com/path/subpath/:query2

你可以注意到 :query2

我如何修改此处列出的第二个正则表达式,以便它选择包含 : 的 url。

预期输出:

http://websites.com/path/subpath/cc:query2

我还想选择所有内容,直到第一次出现 ?=param

输入: sometextsometexhttp://websites.com/path/subpath/#query1sometexthttp://websites.com/path/subpath/cc:query2/text/?=param

输出:

http://websites.com/path/subpath/cc:query2/text/

最佳答案

遗憾的是 Go 正则表达式不支持 lookarounds。但是,您可以通过一种技巧获得最后一个链接:贪婪地匹配所有可能的链接和其他字符,并使用捕获组捕获最后一个链接:

^(?:https?://|.)*(https?://\S+?)(?:\?=|$)

\S*? 惰性空格匹配一起,这也可以捕获到 ?= 的链接。

参见 regex demoGo demo

var r = regexp.MustCompile(`^(?:https?://|.)*(https?://\S+?)(?:\?=|$)`)
fmt.Printf("%q\n", r.FindAllStringSubmatch("sometextsometexhttp://websites.com/path/subpath/#query1sometexthttp://websites.com/path/subpath/:query2", -1)[0][1])
fmt.Printf("%q\n", r.FindAllStringSubmatch("sometextsometexhttp://websites.com/path/subpath/#query1sometexthttp://websites.com/path/subpath/cc:query2/text/?=param", -1)[0][1])

结果:

"http://websites.com/path/subpath/:query2"
"http://websites.com/path/subpath/cc:query2/text/"

如果最后一个链接中可以有空格,只使用.+?:

^(?:https?://|.)*(https?://.+?)(?:\?=|$)

关于regex - 编写没有否定的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31842666/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com