重写正则表达式而不取反
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?:[^:]*$
前瞻存在是有原因的。
但是,如果您坚持认为等效的替代方案,您可以使用的一般策略是:
(?!xyz)
有点等同于:
$|[^x]|x(?:[^y]|$)|xy(?:[^z]|$)
话虽如此,希望我没有犯任何错误:
https?:\/\/(?:$|(?:[^h]|$)|(?:h(?:[^t]|$))|(?:ht(?:[^t]|$))|(?:htt(?:[^p]|$))|(?:http(?:[^s:]|$))|(?:https?(?:[^:]|$))|(?:https?:(?:[^\/]|$))|(?:https?:\/(?:[^\/]|$)))*$
我写了这个正则表达式来帮助我从一些文本文件中提取一些链接:
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?:[^:]*$
前瞻存在是有原因的。
但是,如果您坚持认为等效的替代方案,您可以使用的一般策略是:
(?!xyz)
有点等同于:
$|[^x]|x(?:[^y]|$)|xy(?:[^z]|$)
话虽如此,希望我没有犯任何错误:
https?:\/\/(?:$|(?:[^h]|$)|(?:h(?:[^t]|$))|(?:ht(?:[^t]|$))|(?:htt(?:[^p]|$))|(?:http(?:[^s:]|$))|(?:https?(?:[^:]|$))|(?:https?:(?:[^\/]|$))|(?:https?:\/(?:[^\/]|$)))*$