echo preg_replace('#[/\\\\]#',"999" , "aad/\\");  //  输出  aad999999
echo preg_replace('[/\\\\]',"999" , "aad/\\");    //  输出  aad999查资料查不到..请指教

解决方案 »

  1.   

    放在一前一后时, 相当于定界符echo preg_replace('#[/\\\\]#',"999" , "aad/\\");  //  输出  aad999999
    echo preg_replace('@[/\\\\]@',"999" , "aad/\\");  //  输出  aad999999结果一样, 通常用/ , 但文中有了/, 就改其它的@,#
      

  2.   

    preg_replace('#[/\\\\]#',"999" , "aad/\\");
    ==
    preg_replace('|[/\\\\]|',"999" , "aad/\\");
    #,| 都可以做界定符,当然想要其他的符号做,也可以...
      

  3.   

    ok  ls的答案很清晰  
    温馨提示:  结账了!!
      

  4.   

    有定界符, 里面的/就是一般符号, 没就是转义第一个匹配两次 /\-->999 \-->999,第二个没定界符的, /是转义, 只匹配到字符串的一个\ , 所以一个999
      

  5.   

    终于有时间研究并结贴了,很遗憾,LS的大哥回答错误
    echo preg_replace('#[/\\\\]#',"999" , "aad/\\");  //  输出  aad999999
    echo preg_replace('[/\\\\]',"999" , "aad/\\");    //  输出  aad999
    第一个,# 作为定界符, [ ] 表达的意义是 内容的可能值,可能是 / \ ,所以匹配2次,替换成2个999第二个,也有 定界符 !! 定界符 就是 [] ,此时 [] 的意义不同与上面第一个!!  此时 因为有了定界符, 注意 /\\\\  中的 \\\\ 先是字符串转义成 \\ ,再是 正则本身的转义,就成了 \ ,结果就是表达成了 /\ 字符串,正则的默认原则是贪婪,所以就把 aad/\ 中的 /\ 替换成了 aad999所以,得出结论是,研究正则,一定要仔细LS大哥看了你的回复结果真的是更迷糊,相信自己直觉是正确的
      

  6.   


    echo preg_replace('#[/\\\\]#',"999" , "aad/\\");  //  输出  aad999999
    echo preg_replace('[/\\\\]',"999" , "aad/\\");    //  输出  aad999/\\\\ 相当于 /\\
    普通的没有定界符的,  \w \t \\ 是进行转义。
    而有了定界符后,不进行转义。个人建议,做为一个开发人员,执行一种标准为比较好。 用第二种会好一些。