Php preg_替换为preg_quote,一列除外

Php preg_替换为preg_quote,一列除外,php,regex,preg-replace,preg-quote,Php,Regex,Preg Replace,Preg Quote,我正试着和你一起玩一些把戏 我有一个json数据对象数组和我想要的 替换除一个键的值以外的所有键的值 以下是输入阵列的基本结构: $posts = [{"title":"Test owy post avela","subtitle":"test subtitle", "slug":"test owy-post-laravela-4", "created_at":"2014-11-02"}, {...} ] 我需要将tes的所有值替换为tes,

我正试着和你一起玩一些把戏

我有一个json数据对象数组和我想要的

替换除一个键的值以外的所有键的值

以下是输入阵列的基本结构:

$posts = [{"title":"Test owy post avela","subtitle":"test subtitle",   
           "slug":"test owy-post-laravela-4", "created_at":"2014-11-02"}, 
          {...} ] 
我需要将
tes
的所有值替换为
tes
,除了
slug
键的值

下面是生成
$posts
的代码

$posts = Post::where('title', 'LIKE', '%'.$s.'%')->orWhere('content', 'LIKE', '%'.$s.'%')->get()->toArray();
foreach($posts as &$elm){
     $elm = array_map(function($i) use($s){
          return preg_replace("/(" . preg_quote($s) . ")/is", "<span style='background: #92CF18;'>$1</span>", $i);
     }, $elm);
}
$posts=Post::where('title'、'LIKE'、'%'.$s.%')->或where('content'、'LIKE'、'%'.$s.%')->get()->toArray();
foreach($posts as&$elm){
$elm=数组映射(函数($i)使用($s){
返回preg_replace(“/(“.preg_quote($s)。”)/is“,“$1”,$i);
}美元(榆树),;
}

如果您只想对除“SLUG”之外的所有行应用更改,我想这就是您想要的:

$posts = Post::where('title', 'LIKE', '%'.$s.'%')->orWhere('content', 'LIKE', '%'.$s.'%')->get()->toArray();
foreach($posts as &$elm) {
    foreach ($elm as $key => $value)    {
        if ($key != 'SLUG') $elm[$key] = preg_replace("/(" . preg_quote($s) . ")/is", "<span style='background: #92CF18;'>$1</span>", $value);
    }
}
$posts=Post::where('title'、'LIKE'、'%'.$s.%')->或where('content'、'LIKE'、'%'.$s.%')->get()->toArray();
foreach($posts as&$elm){
foreach($elm作为$key=>$value){
如果($key!='SLUG')$elm[$key]=preg_-replace(“/(“.preg_-quote($s)。”)/is“,”$1“,$value);
}
}

@cragimc的答案完全正确,但您可以使用:

Pattern::prepare([“(”,[$s],”)/is“)
->替换(“$1”)
->全部()
->价值(元);;

您需要发布由
preg\u quote
返回的正则表达式,这正是我想要的。谢谢
Pattern::prepare(["(", [$s], ")/is"])
    ->replace("<span style='background: #92CF18;'>$1</span>")
    ->all()
    ->with($value);