为了账号安全,请及时绑定邮箱和手机立即绑定

PHP 删除字符串中的某个字符串一次

PHP 删除字符串中的某个字符串一次

PHP
FFIVE 2022-09-24 17:17:06
我最近尝试在PHP中使用preg_replace来专门删除一次字符串。但是,我有一个数字列表(例如345,346并想要删除“,346”),并且我一直遇到相同的问题,它如何删除整个字符串并将其留空。期望的结果是345, 346Removing ", 346"Turns to345And also345, 346, 347 removing ", 346"Turns to 345, 347法典:$oldpost = ", ".$_GET['id'];$newposts = preg_replace($oldpost, "", $row['posts']);我以前尝试过这个,没有发现任何似乎做得更好的东西。
查看完整描述

2 回答

?
慕斯709654

TA贡献1840条经验 获得超5个赞

在您的代码中,您有

$newposts = preg_replace($oldpost, "", $row['posts']);

您实际上正在提供要替换的整个字符串本身。因此,它为您提供了一个空字符串,因为您的第个参数是空字符串。

您可以将确切的(如果存在)与可选的匹配项进行匹配,并将它们替换为空字符串。所以你的正则表达式看起来像346,

/(,?\s*346(\s|,|\b))?/

片段:

<?php


$oldpost = "345,346,347";

$newposts = preg_replace("/(,?\s*346(\s|,|\b))?/", "$2", $oldpost);

echo $newposts,PHP_EOL;

演示:https://3v4l.org/MeSeK

请注意,上述方法工作正常,但解决此问题的最佳方法是分解逗号分隔的字符串,并在数组中取消设置具有的位置,然后再次将其内爆346

片段:

<?php


$oldpost = "345,346,347";

$posts = explode(",",$oldpost);


$index = array_search(346,$posts);


if($index !== false){

    unset($posts[$index]);

}


$new_post = implode(",",$posts);


echo $new_post;

演示:https://3v4l.org/qvSEN


请注意,如果 多次出现 ,则可以使用 简单来取消设置它们。346foreach


查看完整回答
反对 回复 2022-09-24
?
郎朗坤

TA贡献1921条经验 获得超9个赞

文档在此处preg_replace:https://www.php.net/manual/en/function.preg-replace.php

尝试为“限制”参数添加一个值。

limit:每个主题字符串中每个模式的最大可能替换次数。默认值为 -1(无限制)。


查看完整回答
反对 回复 2022-09-24
  • 2 回答
  • 0 关注
  • 189 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号