如何删除字符串的最后一部分?

时间:2016-04-21 15:33:31

标签: php string

这是我的字符串:

monkey/rabbit/cat/donkey/duck

如果我的变量是cat ...

$animal = cat

...我想删除cat之后的所有内容。

我想要的结果是:

monkey/rabbit/cat

我尝试使用str_replace

$subject = 'monkey/rabbit/cat/donkey/duck';
$trimmed = str_replace($animal, '', $subject);
echo $trimmed;

但是我得到了结果:

monkey/rabbit//donkey/duck

所以它只是削减了cat

6 个答案:

答案 0 :(得分:1)

您可以将strpossubstr合并:

$pos = strpos($subject, $animal);

if ($pos !== false) {
    $result = substr($subject, 0, $pos + strlen($animal));
}

如果您希望确保仅删除整个片段,则在部分匹配的情况下,您可以使用strpos的偏移参数:

$pos = strpos($subject, $animal);

if ($pos !== false) {
    $result = substr($subject, 0, strpos($subject, '/', $pos));
}

答案 1 :(得分:1)

您可以在案例中使用explode

$string = "monkey/rabbit/cat/donkey/duck";
$val = explode("donkey", $string );

echo $val[0];  

Result: monkey/rabbit/cat

PS * Ofcourse有更好的方法来做到这一点

答案 2 :(得分:1)

以下是对每个步骤的解释:

$subject = 'monkey/rabbit/cat/donkey/duck';

$target = 'cat';
$target_length = strlen($target);                 // get the length of your target string
$target_index = strpos($subject, $target);        // find the position of your target string
$new_length = $target_index + $target_length;     // find the length of the new string
$new_subject = substr($subject, 0, $new_length);  // trim to the new length using substr

echo $new_subject;

这可以合并为一个陈述。

$new_subject = substr($subject, 0, strpos($subject, $target) + strlen($target));

这假定您找到了目标。如果未找到目标,则主体将被修剪到目标的长度,这显然不是您想要的。例如,如果您的目标字符串为"fish",则新主题为"monk"。这就是另一个答案检查if ($pos !== false) {

的原因

对您的问题的评论之一提出了一个有效的观点。如果搜索恰好包含在其他字符串之一中的字符串,则可能会出现意外结果。使用substr / strpos方法时,确实没有一种避免此问题的好方法。如果您希望确保仅匹配分隔符(/)之间的完整单词,则可以按/进行爆炸并在结果数组中搜索目标。

$subject = explode('/', $subject);                    // convert to array
$index = array_search($target, $subject);             // find the target
if ($index !== false) {                               // if it is found,
    $subject = array_slice($subject, 0, $index + 1);  // remove the end of the array after it
}
$new_subject = implode('/', $subject);                // convert back to string

答案 3 :(得分:1)

我的方法是通过你的变量来<?php $string = 'monkey/rabbit/cat/donkey/duck'; $animal = 'cat'; $temp = explode($animal,$string); print $temp[0] . $animal; 取第一部分并附加变量。

monkey/rabbit/cat

输出很好

strpos

无需使用strlensubstrdonkeysroutes.php

中的任何一个

答案 4 :(得分:1)

<?php
    $animal="cat";
    $string1="monkey/rabbit/cat/donkey/duck";
    $parts = explode($animal, $string1);
    $res = $parts[0];
    print("$res$animal")
?>

答案 5 :(得分:1)

我可能会为了沿着RegExp路线走下去但是......

$subject = 'monkey/rabbit/polecat/cat/catfish/duck';
$animal = "cat";
echo preg_replace('~(.*(?:/|^)' . preg_quote($animal) . ')(?:/|$).*~i', "$1", $subject);

这将确保您的动物/字符的任何一方立即包裹,或者它在字符串的开头或结尾(即)猴子鸭子)。

所以在这个例子中它输出:

monkey/rabbit/polecat/cat

专门针对 cat 而不是绊倒 polecat catfish