本帖最后由 winsongood 于 2010-09-21 09:06:58 编辑

解决方案 »

  1.   

    一般情况下回车换行符在html中是无效的,你可以通过查看源文件来确认这一点
    显示到页面时刻通过预定义格式标记if(!empty($match)) {
        echo '<pre>';
        foreach($match as $r) {            
          echo $r;
        }
        echo '</pre>';
    }
      

  2.   

    哦,真是不好意思,其实我原来的代码就是想查找在 <pre> 里的代码,我换成 <code> 只是想更明白些,以下是我的完整代码:
    $content = '
    <pre class=php>
     public class Tester
      {
    //To do list...
      }
    </pre>
    'preg_match_all('/<code[^>]*>([\s\S]*?)<\/code>/i', $content, $result);
                
    $match = array_unique($result[1]);
    if(!empty($match)) {
        foreach($match as $r) {            
        echo $r;
        }
    }
    请问这种情况下,还是用你的方法的话,最终出来不就会有2个pre了?而且我就算这样套在pre里,格式好像也不能保留哦
      

  3.   

    preg_match_all('/<pre[^>]*>([\s\S]*?)<\/pre>/i', $content, $result);如果你原来里面有换行匹配出来的就是有换行的。
    还有一种可能你看到的是换行,实际上只是\r,并不是window需要的\r\n
      

  4.   

    是的,是的,就是 \r 这类字符,但应该如何保留下来呢?我用正则测试软件找出来的结果是[CR][LF]public...这类东西,就是不知道在PHP里要如何保留下来
      

  5.   

    呵,已解决了,是我自己的问题,原来替换时同时将 <pre> 等标签也替换了,还是CunningBoy说的正确的,只有套在 <pre> 里才可保留格式