首页 > 解决方案 > 正则表达式,获取服务器地址的结尾

问题描述

无法弄清楚为什么这不起作用。我只需要捕获服务器地址(在 / 或 ? 之前,以先到者为准),然后在另一个捕获组中剩余的任何内容。所以:

http://something.com/path?query=hello/goodbye

变成

g1:  http://
g2:  something.com
g3:  /path?query=hello/goodbye

但是我尝试的每个正则表达式,服务器地址捕获组都包含斜杠,这些:

/(https?:\/\/)(.+)([\/\?].+)/
/(https?:\/\/)(.+)(\/|\?.+)/

给我吗:

g1:  http://
g2:  something.com/path
g3:  ?query=hello/goodbye

我什至试过说“不要斜线”,或者我是这么想的,但它没有用:

/(https?:\/\/)([.^\/]+)(\/|\?.+)/

标签: regexregex-negation

解决方案


对于您的正则表达式(https?:\/\/)(.+?)([\/\?].+) ,您几乎就在那里。

您可以使(.*)部分非贪婪(.*?)以匹配服务器地址。

(https?:\/\/)(.+?)([\/\?].+)

请注意,您使用 3 个捕获组,但根据您的问题,您只想捕获服务器地址以及另一个捕获组中剩余的任何内容。您可以使用非捕获组开始您的正则表达式以(?:仅获得 2 个组。


推荐阅读