2 回答
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
TA贡献1921条经验 获得超9个赞
文档在此处preg_replace:https://www.php.net/manual/en/function.preg-replace.php
尝试为“限制”参数添加一个值。
limit:每个主题字符串中每个模式的最大可能替换次数。默认值为 -1(无限制)。
- 2 回答
- 0 关注
- 189 浏览
添加回答
举报
