我有一个网址:
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/
不应该返回匹配。
答案 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
,我可以设置自己的标量变量来保存此结果。