Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何删除超大字符串php中的最后一个字符_Php_String - Fatal编程技术网

如何删除超大字符串php中的最后一个字符

如何删除超大字符串php中的最后一个字符,php,string,Php,String,这里发生了一些奇怪的事情,例如,我有一个字符串printend by var_dump: string(83) "papillon" 这根绳子的长度过大,是83,实际长度是8。 无论如何,有些字符串有一个在最终位置:papillon 如果他们只有一个或多个我必须删除最后一个 if(substr_count($tit, '!') >= 1){ $tit = str_replace('!','',$tit); } 这是不正确的,而且由于尺寸太

这里发生了一些奇怪的事情,例如,我有一个字符串printend by var_dump:

 string(83) "papillon"
这根绳子的长度过大,是83,实际长度是8。 无论如何,有些字符串有一个
在最终位置:
papillon
如果他们只有一个或多个
我必须删除最后一个

 if(substr_count($tit, '!') >= 1){
            $tit = str_replace('!','',$tit);
          }

这是不正确的,而且由于尺寸太大,我不能使用
substr()。那么,如何删除字符串中最后出现的特定字符呢

因此,有两种选择

选择A:
所以,如果你有

$my_string = "This is a really long string!!!";
print rtrim($my_string, "!");
// Printed; This is a really long string
这将删除所选字符掩码的所有匹配项

选项B:
所以,我们有下面的字符串和工作

$my_string = "This is a really long string!!!";
print preg_replace("/(.+)(!){1}/i", "$0", $my_string);
// Printed; This is a really long string!!
使用preg_replace只会删除字符串中最后出现的“!”,剩下2个

这在很大程度上取决于您需要什么,当然还有其他选项,如substr,如下所示

$my_string = "This is a really long string!!!";
print substr($my_string, 0, -1);
// Printed; This is a really long string!!
因此,这与preg_replace的工作原理相同,但您也可以计算感叹号的数量,并根据需要删除感叹号

所以,我走开了,意识到我使用的是JavaScript正则表达式,而不是PHP,这导致了问题。。。(哎呀!)
为此,我在一个PHP测试台上胡闹的时候想出了以下几点

这会删除除一个之外的所有“!”,如果您想全部删除,请更改为

$my_string = "This is a really long string!!!";
print preg_replace("/(.)[!]{0,}/i", "$1", $my_string);

不管还有多少个额外的“!”(我已经用103个测试过),要么全部删除,要么除了一个之外全部删除

rtrim($tit,“!”)
从字符串的右侧获取要删除的字符掩码,对于左侧字符也存在
ltrim
使用
substr
的问题是什么?@NicoHaase字符串的长度不是8而是83,因此最后一个位置不是8!在这种情况下,我建议您首先使用
urlencode
对该值进行调试输出……这将允许您查看那些位置中的实际字节值,这些位置只是“不可打印”(甚至可能是无效的)“字符”;它删除了我所有的字符串,为什么?可能是我使用的测试平台,尝试用
$1
代替
$0
不,同样的错误。rtrim也帮不了我,substr也帮不了我,只有regex可以保存me@Cristian-我目前正在努力改进,请容忍我完美,你救了我!非常感谢。
$my_string = "This is a really long string!!!";
print preg_replace("/(.)[!]{0,}/i", "$1", $my_string);