php5.3+ 通过$a = '36,0.00,0.00,100|37,0.00,0.00,100|38,0.00,0.00,100|39,0.00,0.00,100';
$b='38';
$c='85';echo preg_replace_callback("/(^|\|$b,0.00,0.00,)100/", function($m) use ($c){ return $m[1].$c;}, $a);36,0.00,0.00,100|37,0.00,0.00,100|38,0.00,0.00,85|39,0.00,0.00,100

解决方案 »

  1.   

    php5.5- 还可写作echo preg_replace("/(^|\|$b,0.00,0.00,)100/e", "'$1'.'$c'", $a);
      

  2.   

    用新的子字符串替换原始字符串中被指定要替换的字符串
    <?php  
    $str2="某某";
    $str1="**";
    $str="   某某公司是一家以计算机软件技术为核心的高科技企业,多年来始终致力于行业管理软件开发、数字化出版物制作、计算机网络系统综合应用以及行业电子商务网站开发等领域,涉及生产、管理、控制、仓贮、物流、营销、服务等行业";
    echo str_ireplace($str2,$str1,$str);
    ?>
      

  3.   


    老大。如果兼容PHP5.0的话  要怎么写呢。
      

  4.   

    应该不固定吧, 如果固定,还要他有用吗?
    $a = '36,0.00,0.00,100|37,0.00,0.00,100|38,0.01,0.00,100|39,0.00,0.00,100';
    $b='38';
    $c='85';
    echo "{$a}<br>";
    echo preg_replace_callback("/(^|\|$b,0.00,0.00,)100/", function($m) use ($c){ return $m[1].$c;}, $a).'<br>';
    echo preg_replace_callback("/(^|\|$b,\d\.\d{1,2},\d\.\d{1,2},)100/", function($m) use ($c){ return $m[1].$c;}, $a);
    \d\.\d{1,2} 这个确定 中间 的0.00, 别的格式自行调整
      

  5.   

    好吧,。,。是我错了。我没有表答清楚。我开始以为很简单。结果我自已试了一下发现还不行实际我要的效果是这样的$a = '36,0.00,0.00,100|37,0.00,0.00,100|38,0.00,0.00,100|39,0.00,0.00,100';
    $b='38';
    $c='85';就是说 当$a中 包含$b中的字数后。 把38,0.00,0.00,100 中的100取出来   然后用这个100 减去$c里面的数字。
    最后等于这样 36,0.00,0.00,100|37,0.00,0.00,100|38,0.00,0.00,15|39,0.00,0.00,100然后入库、。其它我想要这个把问题想简单了
      

  6.   

    $a = '36,0.00,0.00,100|37,0.00,0.00,100|38,0.00,0.00,100|39,0.00,0.00,100';
    $b='38';
    $c='85';
     
    echo preg_replace_callback("/(^|\|$b,0.00,0.00,)(100)/", function($m) use ($c){ return $m[1].($m[2]-$c);}, $a);36,0.00,0.00,100|37,0.00,0.00,100|38,0.00,0.00,15|39,0.00,0.00,100噢,你的 php 版本没那么高$a = '36,0.00,0.00,100|37,0.00,0.00,100|38,0.00,0.00,100|39,0.00,0.00,100';
    $b='38';
    $c='85';
     
    echo preg_replace("/(^|\|$b,0.00,0.00,)(100)/e", "'$1'.($2-$c)", $a);36,0.00,0.00,100|37,0.00,0.00,100|38,0.00,0.00,15|39,0.00,0.00,100如果都是变数$a = '36,0.00,0.00,100|37,0.00,0.00,100|38,0.00,0.00,100|39,0.00,0.00,100';
    $b='38';
    $c='85';
     
    echo preg_replace("/((?:^|\|$b),(?:[\d.]+,){2})(\d+)/e", "'$1'.($2-$c)", $a);36,0.00,0.00,100|37,0.00,0.00,100|38,0.00,0.00,15|39,0.00,0.00,100
      

  7.   


    啥也不说了。眼泪哇哇地太感谢您了@xuzuning