重写正则表达式而不取反

Rewrite regex without negation

我写了这个正则表达式来帮助我从一些文本文件中提取一些链接:

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

因为我正在使用 golang/regexp 库,所以我无法使用它,因为我的否定 (?!..

我想用它做的是 select 从最后一次出现 http/https 到最后的所有文本。

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

=> 输出:http://websites.com/path/subpath/#query2

任何人都可以帮助我解决问题,我已经花了几个小时尝试不同的方法来重现相同的结果但没有成功。

试试这个正则表达式:

https?:[^:]*$

Regex live here.

前瞻存在是有原因的。

但是,如果您坚持认为等效的替代方案,您可以使用的一般策略是:

(?!xyz)

有点等同于:

$|[^x]|x(?:[^y]|$)|xy(?:[^z]|$)

话虽如此,希望我没有犯任何错误:

https?:\/\/(?:$|(?:[^h]|$)|(?:h(?:[^t]|$))|(?:ht(?:[^t]|$))|(?:htt(?:[^p]|$))|(?:http(?:[^s:]|$))|(?:https?(?:[^:]|$))|(?:https?:(?:[^\/]|$))|(?:https?:\/(?:[^\/]|$)))*$