用正则表达式解析编码的url

时间:2016-09-12 04:53:00

标签: regex

我有以下网址

https://example.com/external-image/http://www.thirdpartyexample.com/TWM/param/param/param/image.jpg

编码看起来像这样

https://example.com/external-image/http%3A%2F%2Fwww.thirdpartyexample.com%2FTWM%2Fparam%2Fparam%2Fparam%2Fimage.jpg

我试图在外部图像之后解析所有内容。

我的目标是1美元 = http%3A%2F%2Fwww.thirdpartyexample.com%2FTWM%2Fparam%2Fparam%2Fparam%2Fimage.jpg

并且$ 2 = thirdpartyexample.com

到目前为止我的正则表达式。

^.*?\/external-image\/((?:https?[%3A][%2F][%2F])?(?:[^@\n]+@)?(?:www\.)?([^:[%2F]\n]+).*)$

我的非工作示例可以在https://regex101.com/r/qL3qT7/1

找到

未编码网址时使用正则表达式。

^.*?\/external-image\/((?:https?:\/\/)?(?:[^@\n]+@)?(?:www\.)?([^:\/\n]+).*)$

为了让regex重新编码已编码的参数,我需要做些什么?我想也许将它们分组可行,但这似乎也没有用。

1 个答案:

答案 0 :(得分:1)

你可以使用这样的东西(基于你给出的输入/输出):

.+external-image\/((?:https?%3A%2F%2F)?(?:www\.)?(.+?\..+?)%2F.+)

它将匹配您关注的URL部分的开头,使用可选的协议字符串,然后将您关心的基本URL放在$1中,将完整(编码)的URL放在{ {1}}。