我有以下网址
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重新编码已编码的参数,我需要做些什么?我想也许将它们分组可行,但这似乎也没有用。
答案 0 :(得分:1)
你可以使用这样的东西(基于你给出的输入/输出):
.+external-image\/((?:https?%3A%2F%2F)?(?:www\.)?(.+?\..+?)%2F.+)
它将匹配您关注的URL部分的开头,使用可选的协议字符串,然后将您关心的基本URL放在$1
中,将完整(编码)的URL放在{ {1}}。