正则表达式以匹配URL的相对路径

时间:2018-08-27 16:08:55

标签: regex url relative-path

如何编写下面所有三种情况都匹配的正则表达式?路径,文件和查询字符串必须准确。域部分可以是以下(域名/ IP地址)的任何变体

http://www.example.com/path1/path2/foobar.aspx?id=123&key=456
https://www.example.com/path1/path2/foobar.aspx?id=123&key=456
64.123.456.789/path1/path2/foobar.aspx?id=123&key=456

基本上,只需要匹配 /path1/path2/foobar.aspx?id=123&key=456 。它前面的部分可能是引导用户访问该网站的任何变体。

1 个答案:

答案 0 :(得分:0)

代码

\.[^/]+(.*)

Try it online!

此RegEx 捕获地址的相对路径。这意味着您将需要在使用的程序中获取匹配项的捕获,而不是匹配的字符。


说明

\.                  Gets the first dot of the address
       [^/]+        Matches all characters that aren't forward slashes
            (.*)    Captures the rest of the address

进一步的说明

我之所以不能匹配(而不是捕获)地址,是因为我没有任何表达式可以明确表示地址的开头相对路径(无需匹配其他任何字符)。

这是因为某些地址具有协议部分(例如:http://),而另一些则没有。额外的两个正斜杠意味着RegEx会变得更长一些,以便验证我们是否使用正确的正斜杠。

由于所有地址(据我所知)在域(www.something.com64.123.456.789)中都有一个点,因此我使用了第一个点。由于域始终位于相对路径之前,因此我们可以跳到下一个正斜杠并始终到达相对路径。

然后,我们只需捕获地址的其余部分(包括第一个正斜杠),即可轻松获取。