我记得学php的时候,老师说“e”是配合preg_replace($reg, $replace, $text)。使替换的内容($replace),可以使用正则$reg中的子模式,但以下这个代码却报错:$reg = "/(\d{2})\/(\d{2})\/(\d{4})/e";
$text = '01/25/2009到02/02/2009';
$replace = "\${3},\${1}";echo preg_replace($reg, $replace, $text);      //报错syntax error, unexpected ','
把正则中的模式修正符e删除了,就没事了,这是怎么回事?
模式修正符e到底是什么作用?

解决方案 »

  1.   


    ……
    $replace = "'\${3},\${1}'";
    ……
    原因你查手册,总之加了e修饰符,替换字符串要符合php的语法规范,实际上就是eval的一次执行
      

  2.   

    在 replace 中使用了 e 修正符,则字符串(或者是数组中的字符串)会被当作php代码
      

  3.   


    echo preg_replace('/(\d+),(\d+)/e', '$1+$2', '2,3');
    输出 5
      

  4.   

    简单的说就是PHP会把 $replace的结果当成表达式计算
      

  5.   

    明白了!谢谢各位!尤其是xuzuning,例子很重要HOHO