【问题标题】:PHP how do i cut substring after last slash?PHP如何在最后一个斜杠后剪切子字符串?
【发布时间】:2014-01-22 10:36:37
【问题描述】:

嗨,我想知道如何在最后一个斜杠之后从字符串中获取子字符串? 简而言之,我想从路径中获取文件名。

例如我得到这样的字符串: test-e2e4/test-e2e4/test-e2e4/6.png 我想得到6.png 我该怎么做? 我只有dir,文件名可以是所有格式,也可以是其他文件

或者test-e2e4/test-e2e4/test-e2e4/aaaaa,想得到aaaaa

也许是正则表达式?或者,也许您知道一些可以为我做的不错的功能?

【问题讨论】:

    标签: php regex string


    【解决方案1】:

    除了其他回复之外,实际上 PHP 中有一个函数可以做到这一点:basename。示例:

    $string = 'test-e2e4/test-e2e4/test-e2e4/6.png';
    $base = basename($string); // $base == '6.png';
    
    $string = 'test-e2e4/test-e2e4/test-e2e4/aaaaa';
    $base = basename($string); // $base == 'aaaaa'
    
    $string = '6.png';
    $base = basename($string); // $base == '6.png'
    

    这里有完整的细节:http://php.net/basename

    【讨论】:

    • 如果我的字符串看起来像:6.png?它会返回异常吗??
    • basename('6.png') === '6.png'(即它只会返回字符串)
    【解决方案2】:

    这样做..

    $yourstring = 'test-e2e4/test-e2e4/test-e2e4/6.png';
    $val = array_pop(explode('/',$yourstring)); // 6.png
    

    【讨论】:

    • 如果我的字符串看起来像:6.png?它会返回异常吗?还是仍然爆炸会设置一个元素数组?
    • @Vardius 有什么特殊原因会阻止您自己进行测试吗? …
    【解决方案3】:

    您可以尝试explodearray_pop 函数来解决这个问题:

    $str = 'test-e2e4/test-e2e4/test-e2e4/aaaaa.png';
    $str = explode('/', $str);
    $filename = array_pop($str);
    
    echo $filename; //Output will be aaaaa.png
    

    【讨论】:

      【解决方案4】:

      ...或者您可以使用以下正则表达式: [^\/]*$

      【讨论】:

        【解决方案5】:

        您不需要为此使用正则表达式,您可以使用substr() 获取字符串的一部分,并使用strrpos() 指定哪个部分:

        $full_path = "test-e2e4/test-e2e4/test-e2e4/6.png"
        $file      = substr( $full_path, strrpos( $full_path, "/" ) + 1 );
        

        substr() 返回字符串的一部分,strrpos() 告诉它从字符串中最后一个斜杠的位置开始,+1 从返回值中排除斜杠。

        【讨论】:

          猜你喜欢
          • 2015-07-29
          • 1970-01-01
          • 2021-12-07
          • 1970-01-01
          • 2012-12-02
          • 1970-01-01
          • 2013-08-11
          • 2020-05-04
          • 1970-01-01
          相关资源
          最近更新 更多