$str="123/456/789";
$str=preg_replace("/\//","\\",$str);
echo $str;
这个的目的就是将“/”,换成“\”;这个我试过了,能成功!$str="123\456\789";
$str=preg_replace("/\\/","\/",$str);
echo $str;
这个目的是将“\”,换成“/”,这个我试了一下,有错!
错误提示为preg_replace(): No ending delimiter '/' 
有哪位大侠知道这个是怎么回事吗?下面一个我要怎么匹配才能成功呢

解决方案 »

  1.   

    $str=preg_replace("/\\\\/","\/",$str);
    or
    $str=preg_replace('/\\/',"\/",$str);
      

  2.   

    简单字符串替换,不需要正则
    str_replace('/','\\',$str);
    or
    str_replace('\\','/',$str);
      

  3.   

    这种替换的确直接使用str_repalce就可以了.
      

  4.   

    str_replace在某种程度上不如strtr
    我比较喜欢后者
    strtr($str, array('\' => '/'));
      

  5.   

    这个我看了下,想想,双引号里面的‘/’会被转译的,所以你得使用单引号
    还有就是 你的匹配模式要这样写 $patthern = '/\\\/';
    你照我的方法试下 我测试过 通过了
    $str='123\456\789';
    echo $str."<br />";
    $str=preg_replace("/\\\/",'/',$str);
    echo $str;
      

  6.   

    你说的我试过了,可以成功,但是为什么$pattern=="/\\\/",怎么会有三个“\”不是一个转就可以了吗?另外我试了一下,
    $replace双引号是可以的,但是前提是$str='123\456\789';这个地方换成$str="123\456\789"就有问题,单引号和双引号有这么大的区别吗?
      

  7.   

    针对你说的单引号和双引号为何区别大,那就要问PHP了,因为PHP默认单引号里面的东西是不经过处理就直接使用,而双引号里面的东西PHP是要检查有没有变量和转译字符需要处理,你可以看下PHP的基础就知道了
    下面关于为什么要使用“\\\”来表示一个‘\’,那是因为PHP解释器会把"\\\"解释成"\\",然后再经过正则解释成"\",因为要经过两次处理,所以就要使用三个反斜杠
      

  8.   

    $str="123\\456\\789";
    $str=preg_replace("/\\\/","/",$str);
    echo $str; //out 123/456/789这里需要注意两个问题
    1、正则表达式 "/\\\/" 中 第一和第二个 / 结合成一个 \ ,这是 php 的字面代码的要求。传递给 preg_replace 的实际是 "/\\/"
    也就是说如果你把 /\\/ 存入到文件或数据库里,然后读取到变量中作为规则串,就不会报错
    2、同样的 $str="123\456\789"; 应写作 $str="123\\456\\789";
    写作 $str="123\456\789"; 时,由于转义符的存在,字符串 $str 的内码实际是:
    0x31 0x32 0x33 0x2e 0x07 0x38 0x39
    与"123\\456\\789" 相距甚远
    0x31 0x32 0x33 0x5c 0x34 0x35 0x36 0x5c 0x37 0x38 0x39
      

  9.   

    csdn改版真的不是很适应这样的界面 蛋疼