把d:AppservwwwEcMall/data/files/store_4/goods_9/201007170143295163.jpg变成
d:/Appserv/www/EcMall/data/files/store_4/goods_9/201007170143295163.jpg
正则不熟真是不行,不知道哪一天就给你绊一脚 

解决方案 »

  1.   


    正则倒是不会
    //abc/d/e用正则变成a/b/c/d/e
    $s = 'abc/d/e';
    $path = '';
    $arr = explode('/', $s);
    foreach($arr as $k => $v){
    if(strlen($v) > 1){
    $ss = $v;
    while(strlen($ss) > 1){
    $path .= $ss[0].'/';
    $ss = substr($ss, 1);
    }
    }else{
    $path .= $v.'/';
    }
    }
    $path = substr($path, 0, strlen($path) - 1);
    echo $path;
      

  2.   

    $s = "d:AppservwwwEcMall/data/files/store_4/goods_9/201007170143295163.jpg";
    $p = "/(:|Appserv|www)/";echo preg_replace($p, "$1/", $s);
     out: d:/Appserv/www/EcMall/data/files/store_4/goods_9/201007170143295163.jpg
      

  3.   

    你既然知道  d:AppservwwwEcMall
    这个换成其它的,何不用 str_replace 呢??
      

  4.   


    $str = 'abc/d/e/fdss';function replaceSlash($m){
    if($m[0] != '/')
    return $m[0].'/';
    else
    return '';
    }echo preg_replace_callback('/\w|\//is','replaceSlash',$str);
    写完之后才发现你帖子的正文跟你标题那个不一样。我以为你是想把单字符用/隔开。上面的代码并不针对你实际碰到的问题,因为你实际遇到的问题不确定。可能你自己都不知道哪些字符串是一个目录名。如果你能确定的话,用4楼的那个就行了。在(:|Appserv|www)里面把你认为是目录的字符串放在里面。
      

  5.   

    用 str_replace 就行了,性能好像比正则的好点吧
      

  6.   


    /*
    * @ 前面都一致的,用str_replace就可以了。
    */
    $dir = 'd:AppservwwwEcMall/data/files/store_4/goods_9/201007170143295163.jpg';
    echo preg_replace('/(.*?)(\/files\/store_4\/)(.*?)/is', "d:/Appserv/www/EcMall/data$2$3", $dir);//d:/Appserv/www/EcMall/data/files/store_4/goods_9/201007170143295163.jpg