How do I get the last segment of URL using regular expressions

后端 未结 4 1243
暖寄归人
暖寄归人 2020-12-31 07:06

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?

相关标签:
4条回答
  • 2020-12-31 07:32

    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/'.

    0 讨论(0)
  • 2020-12-31 07:39

    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.

    0 讨论(0)
  • 2020-12-31 07:40

    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.

    0 讨论(0)
  • 2020-12-31 07:46

    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.

    0 讨论(0)
提交回复
热议问题