I have a URL:
www.domain.com/first/second/last/
How do I get the last term between slashes? i.e. last
using regular expressions?
This should do the trick:
[^/]+(?=/$|$)
With a (?=lookahead)
you won't get the last slash.
[^/]+
Looks for at least one character that is not a slash (as many as possible).
(?=/?^|^)
makes sure that the next part of the string is a / and then the end of string or just end of string.
Matches match
in /one/two/match
, '/one/two/match/'.
The last slash might be optional. Right?
How about something like this:
$url =~ m|([^/]+)/?$|;
my $end_of_url = $1;
The $
on the end anchors the regular expression to the end of the string. The [^/]
means anything that's not a slash and the +
after means I want one or more things that are not slashes. Notice that this is in a capture group which are marked with parentheses.
I end the regular expression with /?
which means that there may or may not be a slash on the very end of the string. I've put my regular expression between m|
and |
, so I can use forward slashes without having to constantly escape them.
The last part of the URL is now in $1
and I can set my own scalar variable to save this result.
This regex (a slightly modified version of Joseph's answer), should give you the last segment, minus ending slash.
([^/]+)/?$
Your result will be the first capture group.
Here's a simple regex:
[^/]+(?=/$|$)
Should match anything you throw at it.
If you want to look in a particular directory, use this:
/directory.*/([^/]+)/?$
and your result will be in the first capture group.