把d:AppservwwwEcMall/data/files/store_4/goods_9/201007170143295163.jpg变成
d:/Appserv/www/EcMall/data/files/store_4/goods_9/201007170143295163.jpg
正则不熟真是不行,不知道哪一天就给你绊一脚
d:/Appserv/www/EcMall/data/files/store_4/goods_9/201007170143295163.jpg
正则不熟真是不行,不知道哪一天就给你绊一脚
正则倒是不会
//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;
$p = "/(:|Appserv|www)/";echo preg_replace($p, "$1/", $s);
out: d:/Appserv/www/EcMall/data/files/store_4/goods_9/201007170143295163.jpg
这个换成其它的,何不用 str_replace 呢??
$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)里面把你认为是目录的字符串放在里面。
/*
* @ 前面都一致的,用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