如何删除字符串中特定单词的最后一个单词?
例如,这是字符串
$string = 'bla test bla test bla test bla test bla'
现在我想删除test
,但只是最后一个,而不是每个人。输出必须如下
$string = 'bla test bla test bla test bla bla'
我只是找到str_replace和一些东西,但我删除每个测试,而不仅仅是最后一个…我也在这里搜索,但没有找到删除我要删除的特定单词的东西。找个有边角的东西之类的。但是在我搜索的最后一个单词之后,可以有更多的单词
试试这个:
$string = 'bla test bla test bla test bla test bla';
echo preg_replace('~ test(?!.* test)~', '', $string);
使用提供的字符串函数strrpos()
在字符串处理中从右向左查找指针
和str_replace()
你可以很简单地做到
$string = 'bla test bla test bla test bla test bla';
$needle = 'test';
echo $string . PHP_EOL;
$pos = strrpos($string, $needle, 0);
if ( $pos !== FALSE ){
// it was found in the string
$new_string = substr_replace($string, '', $pos, strlen('test '));
} else {
echo "$needle not found in the string";
}
echo $new_string .PHP_EOL;
结果
bla test bla test bla test bla test bla
bla test bla test bla test bla bla
手动操作的方法是使用分隔符将字符串分割成一个数组,检测最后一个主题的位置(反向),然后取消设置并将其粘合在一起。
var_dump(remove_last('bla test bla test bla test bla test bla', 'test', ' '));
function remove_last(string $text, string $subject, string $separator): string {
$parts = explode($separator, $text);
$pos = count($parts) -1 -array_search($subject, array_reverse($parts));
if ($parts[$pos] ?? false) {
unset($parts[$pos]);
}
return implode($separator, $parts);
}
https://3v4l.org/X0F13
使用substr_replace()
的另一种方法:
var_dump(remove_last('bla test bla test bla test bla test bla', 'test', ' '));
function remove_last(string $text, string $subject, string $separator): string {
if (($offset = strrpos($text, "$separator$subject")) === false) {
$offset = strrpos($text, "$subject$separate");
}
if ($offset !== false) {
return substr_replace($text, '', $offset, strlen("$separator$subject"));
}
return $text;
}
https://3v4l.org/ZUULc
首先还原字符串:
'bla test bla test bla test bla test bla test bla'变成'alb tset alb tset alb tset alb tset alb tset alb tset alb'。
然后将该字符串中要替换的字符串的反转版本替换为要替换它的字符串的反转版本。
因此:将' tset '替换为' '(添加空格以强制替换完整的单词):
'alb tset alb tset alb'变成'alb alb tset alb tset alb tset alb'。
然后再恢复:
'alb alb tset alb tset alb tset alb'变成'bla test bla test bla test bla bla bla'。
你可以把它放到online line中:
<?php
$string = 'bla test bla test bla test bla test bla';
$word = 'test';
echo strrev(preg_replace('/'.preg_quote(' '.strrev($word).' ', '/').'/', ' ', strrev($string), 1));