2

如何从特定字符串到特定结束字符串的主字符串中提取特定子字符串。就像我有下面的路径

你的路径是 D:///path/to/required/directory/sample/subdirectory/a/b/abc/sample.text

从上面的路径中,我想从 to 中提取子/sample字符串abc。详细地

/样本/子目录/a/b/abc

我尝试了其他子字符串函数,但没有成功。

有人可以帮我吗?

我曾尝试使用 php.net 站点中给出的示例之一

function reverse_strrchr($haystack, $needle, $trail)
{
        return strrpos($haystack, $needle) ? substr($haystack, 0, strrpos($haystack, $needle) + $trail) : false;
}

但它给了我下面的路径,但我想/sample从头到尾

你的路径是 D:///path/to/required/directory/sample/subdirectory/a/b/abc

4

2 回答 2

2

我想你会喜欢这个的。你需要的是正确的。

您的主字符串是: D:///path/to/required/directory/sample/subdirectory/a/b/abc/sample.text

您想从“/sample”开始提取(第一个“sample”字)

您想停止提取到“/sample”(最后一个“sample”字)

将返回以下字符串作为答案“/sample/subdirectory/a/b/abc/sample”

$mainstr = "D:///path/to/required/directory/sample/subdirectory/a/b/abc/sample.text";
$needle = "/sample";
$trail  = "/sample";

echo $this->reverse_strrchr($mainstr, $needle, $trail);

函数定义为:

function reverse_strrchr($haystack, $needle, $trail)
{
    $start  = strpos($haystack, $needle);
    $total  = strrpos($haystack, $trail) - strpos($haystack, $needle) + strlen($trail);
    $result = substr($haystack, $start, $total);
    return $result;
}
于 2013-09-26T08:45:37.867 回答
1

您从位置 0 开始。

substr($haystack, 0, strrpos($haystack, $needle) + $trail)

搜索 /sample 的位置并将其替换为 0。

例如:

$haystack = -- your path here --;
$result = substr($haystack, strrpos($haystack, "/sample"), strrpos($haystack, "abc"));
echo $result; // Your new "path"
于 2013-09-26T08:01:07.773 回答