如何使用正则表达式获取最后一段URL

时间:2012-01-10 03:27:12

标签: regex perl url-rewriting

我有一个网址:

www.domain.com/first/second/last/

如何获得斜杠之间的最后一个词?即last使用正则表达式?

请注意,网址可能只是:

www.domain.com/last/ 

或者:

www.domain.com/first/second/third/fourth/last/

我需要提取最后一个术语,以便在使用PERL和REGEX的Zeus Server的Request Rewrite模块中使用。

更新

在实现了一些答案之后,我刚刚意识到我只需要在某个目录中的URL上进行匹配。

www.domain.com/directory/first/second/last/ 

应该返回last。鉴于:

www.domain.com/first/second/last/ 

不应该返回匹配。

4 个答案:

答案 0 :(得分:20)

这是一个简单的正则表达式:

[^/]+(?=/$|$)

应该匹配你扔的任何东西。


如果要查看特定目录,请使用:

/directory.*/([^/]+)/?$

,您的结果将在第一个捕获组中。

答案 1 :(得分:4)

这个正则表达式(约瑟夫答案的略微修改版本)应该给你最后一段,减去结尾斜线。

([^/]+)/?$

您的结果将是第一个捕获组。

答案 2 :(得分:1)

这应该可以解决问题:

[^/]+(?=/$|$)

使用(?=lookahead),您将无法获得最后一个斜杠。

[^/]+查找至少一个不是斜杠的字符(尽可能多)。 (?=/?^|^)确保字符串的下一部分是/,然后是字符串的结尾或字符串的结尾。

匹配match中的/one/two/match,'/ one / two / match /'。

答案 3 :(得分:0)

最后一个斜杠可能是可选的。正确?

这样的事情怎么样:

$url =~ m|([^/]+)/?$|;
my $end_of_url = $1;

末尾的$将正则表达式锚定到字符串的末尾。 [^/]表示任何不是斜杠的东西,+表示我想要一个或多个不是斜杠的东西。请注意,这是在一个用括号标记的捕获组中。

我用/?结束正则表达式,这意味着字符串的最后可能有也可能没有斜杠。我把我的正则表达式放在m||之间,所以我可以使用正斜杠而不必经常逃避它们。

网址的最后一部分现在位于$1,我可以设置自己的标量变量来保存此结果。