本帖最后由 xuzuning 于 2011-12-24 08:45:02 编辑

解决方案 »

  1.   

    $p = new autoAddHttp;
    echo $p;输出<a href="http://www.163.com">http://www.163.com</a> 难道你觉得我是url么?
    <a href="http://www.133.com">www.133.com</a>
    <a href="http://www.152.com">www.152.com</a>
    <a href="http://www.jp0576.com">www.jp0576.com</a>
    <a href="http://test.test.com">test.test.com</a>
    <br>
      

  2.   

    replacement 可以包含 //n 形式或(自 PHP 4.0.4 起)$n 形式的逆向引用,首选使用后者。每个此种引用将被替换为与第 n 个被捕获的括号内的子模式所匹配的文本。n 可以从 0 到 99,其中 //0 或 $0 指的是被整个模式所匹配的文本。对左圆括号从左到右计数(从 1 开始)以取得子模式的数目。对替换模式在一个逆向引用后面紧接着一个数字时(即:紧接在一个匹配的模式后面的数字),不能使用熟悉的 //1 符号来表示逆向引用。
      

  3.   

    两位大佬 谢谢光顾
    不过您2位都没有回答重点啊
    请赐教:
    为何第二个参数要写成:'"<htmlcode."'.'">"'
    而不能写成:'htmlcode1'.'htmlcode2'在vi下看的清楚嵌套关系 下图:
    http://hi.csdn.net/attachment/201112/24/10245627_1324686965Rs2d.jpg
      

  4.   

    我都用了模式控制符e了,基本的我是懂的。
    preg_replace()第二个参数本来是传字符串 放单引号里面,用点做连接符
    然后单引号里面非要再模拟字符串 也就是单引号里面要用双引号双,引号这层还要用点做连接符再连接起来,用vi可以看清嵌套 
    http://hi.csdn.net/attachment/201112/24/10245627_1324686965Rs2d.jpg
      

  5.   

    我的目的就是回调addHttp函数返回字符串:http://
    然后前后加上其他html代码,这些代码非要放到双引号里面
      

  6.   

    '"<a href=\""'.'.$this->addHttp("\1").'.'"\1\2.\3.\4\">".'.'"\1\2.\3.\4</a>"'
    移去累赘的 '.',并脱去外层的引号
    "<a href=\"" . $this->addHttp("\1") . "\1\2.\3.\4\">" . "\1\2.\3.\4</a>"正好符合 /e 要求:一个字符串表达式
      

  7.   

    '"<a href=\""'.'.$this->addHttp("\1").'.'"\1\2.\3.\4\">".'.'"\1\2.\3.\4</a>"'以上就是我第二个参数,不是回调问题,而是preg_repalce的参数问题
    注意观察 单引号 和双引号的嵌套,这也太奇怪了吧
    按理说下成如下 可是不行
    '<a href=\"'.'$this->addHttp("\1")'.'\1\2.\3.\4\">'.'\1\2.\3.\4</a>'
      

  8.   

    难道/e会脱1层引号??
    所以用下面这样的 不行?
    '<a href=\"'.'$this->addHttp("\1")'.'\1\2.\3.\4\">'.'\1\2.\3.\4</a>'
      

  9.   

    如果要符合/e的要求:一个字符串
    '<a href=\"'.'$this->addHttp("\1")'.'\1\2.\3.\4\">'.'\1\2.\3.\4</a>'
    这不就是个字符串么?
    为何不成呢???????
    请赐教~
      

  10.   


    你可以这么理解 ( "/e会脱1层引号" )但实际上,引号内的字符串必须是一段可以被php处理的代码....这样讲是不是不够清楚,换句话说, 它和 eval的参数,create_function的第二个参数有类似的地方 
    (不完全相同,因为preg_replace这个不需要echo或print等,它只是一个表达式)
      

  11.   


    钻牛角尖里去了
    e就是eval,先preg_replace,再执行eval,所以替换后字符串要符合php的语法规范,否则就会解析通不过,Parse error例如:'"<a href=\"{$this->addHttp("\1")}\1\2.\3.\4\">\1\2.\3.\4</a>"'这样也没问题