Regular Expression to collect everything after the last /

前端 未结 8 1668
北荒
北荒 2020-11-28 05:16

I\'m new at regular expressions and wonder how to phrase one that collects everything after the last /.

I\'m extracting an ID used by Google\'s GData.

相关标签:
8条回答
  • 2020-11-28 05:38
    /^.*\/(.*)$/
    

    ^ = start of the row

    .*\/ = greedy match to last occurance to / from start of the row

    (.*) = group of everything that comes after the last occurance of /

    0 讨论(0)
  • 2020-11-28 05:43

    This matches at least one of (anything not a slash) followed by end of the string:

    [^/]+$
    


    Notes:

    • No parens because it doesn't need any groups - result goes into group 0 (the match itself).
    • Uses + (instead of *) so that if the last character is a slash it fails to match (rather than matching empty string).


    But, most likely a faster and simpler solution is to use your language's built-in string list processing functionality - i.e. ListLast( Text , '/' ) or equivalent function.

    For PHP, the closest function is strrchr which works like this:

    strrchr( Text , '/' )
    

    This includes the slash in the results - as per Teddy's comment below, you can remove the slash with substr:

    substr( strrchr( Text, '/' ), 1 );
    
    0 讨论(0)
  • 2020-11-28 05:50

    You can also get the "filename", or the last part, with the basename function.

    <?php
    $url = 'http://spreadsheets.google.com/feeds/spreadsheets/p1f3JYcCu_cb0i0JYuCu123';
    
    echo basename($url); // "p1f3JYcCu_cb0i0JYuCu123"
    

    On my box I could just pass the full URL. It's possible you might need to strip off http:/ from the front.

    Basename and dirname are great for moving through anything that looks like a unix filepath.

    0 讨论(0)
  • 2020-11-28 05:54

    based on @Mark Rushakoff's answer the best solution for different cases:

    <?php
    $path = "http://spreadsheets.google.com/feeds/spreadsheets/p1f3JYcCu_cb0i0JYuCu123?var1&var2#hash";
    $vars =strrchr($path, "?"); // ?asd=qwe&stuff#hash
    var_dump(preg_replace('/'. preg_quote($vars, '/') . '$/', '', basename($path))); // test.png
    ?>
    
    1. Regular Expression to collect everything after the last /
    2. How to get file name from full path with PHP?
    0 讨论(0)
  • 2020-11-28 05:55

    you can also normal string split

    $str = "http://spreadsheets.google.com/feeds/spreadsheets/p1f3JYcCu_cb0i0JYuCu123";
    $s = explode("/",$str);
    print end($s);
    
    0 讨论(0)
  • 2020-11-28 05:55

    Not a PHP programmer, but strrpos seems a more promising place to start. Find the rightmost '/', and everything past that is what you are looking for. No regex used.

    Find position of last occurrence of a char in a string

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