PHP rtrim函数
结果: abvgd abvgdany_字符串abvgd abvgs abvgsany_字符串abv “s”在哪里?)切断第二个参数中的字符 这意味着它会分别切断PHP rtrim函数,php,string,function,Php,String,Function,结果: abvgd abvgdany_字符串abvgd abvgs abvgsany_字符串abv “s”在哪里?)切断第二个参数中的字符 这意味着它会分别切断a、n、y、、s、t、r、i、n和g,直到这些都不出现在字符串的末尾 如果你想模仿你的行为,你可以用以下方法: $foo = 'abvgd'; // "s" in the end $foos = 'abvgs'; $bar = 'any_string'; $foo_concat = $foo . $bar; $foos_con
a
、n
、y
、、s
、t
、r
、i
、n
和g
,直到这些都不出现在字符串的末尾
如果你想模仿你的行为,你可以用以下方法:
$foo = 'abvgd';
// "s" in the end
$foos = 'abvgs';
$bar = 'any_string';
$foo_concat = $foo . $bar;
$foos_concat = $foos . $bar;
$foo_decode = rtrim($foo_concat, $bar);
$foos_decode = rtrim($foos_concat, $bar);
echo "\n$foo \t $foo_concat \t $foo_decode";
echo "\n$foos \t $foos_concat \t $foos_decode";
// $foo == $foo_decode
// $foos != $foos_decode
第二个参数是要删除的所有字符的列表,“任意字符串”包含g
和s
,因此这两个字符都从字符串末尾删除
如果要从另一个字符串的末尾删除整个字符串,可以使用:
<?php
$totalString = 'this is my string of any_string any_stringany_string';
$stringToCutOff = 'any_string';
var_dump(rtrim_string($totalString, $stringToCutOff));
// string(32) "this is my string of any_string "
function rtrim_string($string, $stringToCutOff) {
$stringToCutOffLength = strlen($stringToCutOff);
while (substr($string, -$stringToCutOffLength) == $stringToCutOff) {
$string = substr($string, 0, -$stringToCutOffLength);
}
return $string;
}
?>
或者,如果您的目标是从末尾删除某个字符串的所有重复:
$str = preg_replace('#'.preg_quote($toRemove,'#').'$#','',$str);
(以及以上引用之间带有可选空格的选项):
rtrim()
从右侧删除与第二个参数匹配的字符,在您的例子中是其变量$bar
它使用第二个参数($bar
)作为字符列表,因此它单独使用所有字母。在您的例子中,$foos\u concat=$foos.$bar;//“abvgsany_字符串”
因此,它从“abvgsany_string”
中删除“gs”
,因为g
和s
在任何_string($bar
)的字符列表中
如果$foos\u concat
是“abvgspany\u string”
中有“p”
,它会给您“abvgsp”
,因为它的rtrim()和“p”
不在第二个参数($bar
)字符列表中。第二个参数:您还可以指定要去除的字符,通过charlist参数。只需列出所有要删除的字符。具有可以指定字符的范围
从技术上讲,正则表达式只匹配字符串的一个实例。在$
@h2ooooooo之前添加括号和+
,好吧,这就是重点,如果他添加“any_string”,然后测试从末尾删除“any_string”,似乎目标是替换1个实例。然而他使用的是rtrim
,它将继续删除,直到什么都不存在(例如/([any_string]+)$/
)@h2ooooooo是的,但他显然不知道rtrim
是如何工作的,否则这个问题就不在这里了。我将添加一个替代方案,因为我们无法确定目标是什么。
$str = preg_replace('#('.preg_quote($toRemove,'#').')+$#','',$str);
$str = preg_replace('#(\s*'.preg_quote($toRemove,'#').'\s*)+$#','',$str);