这是我的字符串:
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
。
答案 0 :(得分:1)
$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
无需使用strlen
,substr
,donkeys
或routes.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