$s = '{"name":xxx,"id":123456}{{"a":xxx,"id":147258,"b":xxx}{"c":xxx,"id":985236,"d":xxx}}';
echo preg_replace('/(?<="id":)[^,}]+/', '"$0"', $s);
{"name":xxx,"id":"123456"}{{"a":xxx,"id":"147258","b":xxx}{"c":xxx,"id":"985236","d":xxx}}

解决方案 »

  1.   


    $s = '{"name":xxx,"id":123456}{{"a":xxx,"id":147258,"b":xxx}{"c":xxx,"id":985236,"d":xxx}}';
    echo preg_replace('/("id":)([^,}]+)/', '$1"$2"', $s);解释版主的正则:
    (?<="id":):(?<=pattern)在任何匹配 pattern 的字符串结尾处匹配查找字符串,但是pattern 必须为定长(也就是"id":),非获取
    [^,}]+:匹配除了“,”和“}”之外的任何字符至少一次,$0就是匹配到了内容
      

  2.   

    preg_replace('/(?<="id":)[^,}]+/', '"$0"', $s)

    preg_replace('/("id":)([^,}]+)/', '$1"$2"', $s)
    是一回事