如何从字符串末尾删除字符,直到达到某个字符?

时间:2013-04-18 22:45:29

标签: php

我正在尝试从字符串末尾删除字母,直到字符串以某些字符结束。

我有以下字符串:

$filename=test1/test.jpeg;
$filename2=project/test2/test1112.jpeg;

// The file name length could vary. 

我想获取文件夹,因此值为test1project/test2

我试过了

$folder = substr($filename,-4)

但这是静态的。我该如何动态地做到这一点?

7 个答案:

答案 0 :(得分:3)

你需要使用php的dirname函数

$filename = 'test1/test.jpeg';
$filename2 = 'project/test2/test1112.jpeg';


var_dump(dirname($filename));
var_dump(dirname($filename2));

答案 1 :(得分:2)

可能会更快做到

$folder = substr($filename, 0, strrpos('/'));

答案 2 :(得分:1)

您可以使用数组将字符串拆分为/

$file_parts_ary = explode("/", $filename);

如果数组中的最后一个元素是文件名,那么您就知道所有以前的元素都是路径。您可以再次组合它们或拉出一个特定的。

$file_path_ary = array_pop($file_parts_ary);   // remove the filename
$file_path = implode("/", $file_path_ary);  // Put the rest of the path back together

答案 3 :(得分:1)

PHP有一个名为strrpos的函数,它返回字符串中最后一个元素。所以在那之后你可以使用substr($ strin,0,strrpos(“/”))

OK?

答案 4 :(得分:1)

如果它是您正在寻找的特定文件名,则PHP的内置函数dirname()probably what you want

对于提出的问题的更通用的答案,当然可以使用substr()在字符串中向后工作,直到达到某个字符。

这是一个通用的“从字符串末尾删除字符,直到我达到某个字符”功能:

<?php

$str = 'This is a few words in some sort of order; it makes some sort of sense.';

function find_to_last_char($str, $char) {
  $reversed_string = strrev($str);
  $char_pos = strpos($reversed_string, $char);
  if ($char_pos === false) return $str; // character not present
  $trim = substr($reversed_string, $char_pos);
  return strrev($trim);
}

echo find_to_last_char($str, ';');

答案 5 :(得分:1)

PHP pathinfo function是您正在寻找的。以下是基于您的代码的示例:

<?php
    $filenames = array(
        'test1/test.jpeg',
        'project/test2/test1112.jpeg'
    );

    foreach ($filenames as $filename) {
        echo pathinfo($filename, PATHINFO_DIRNAME) . "\n";
    }

导致:

    test1
    project/test2

答案 6 :(得分:0)

反转字符串,删除第一个斜杠的所有内容,然后重新反转它以获取没有文件名的原始字符。