仅在php中的两个标签之间替换新的换行符

时间:2014-09-18 10:19:33

标签: php preg-replace preg-match-all

我在TinyMCE中管理内容。我有一个名为code的类,我需要在PHP中替换换行符,但只需要在两个标记之间。

所以我的html看起来像这样



<p>hello see my css below</p>
<p class="code">

h1 { 
font-size:10px
font-color:#FFF
}

h2 { 
font-size:10px
font-color:#FFF
}

</p>
&#13;
&#13;
&#13;

在CSS中,我有一个<code></code>标记,可以自动为每行添加行号。因此,我想将上述内容替换为以下内容:

<p>hello see my css below</p>
<p class="code">
<code>h1 {</code> 
<code>font-size:10px</code> 
<code>font-color:#FFF</code>
<code>}</code>
<code></code>
<code>h2 { </code>
<code>font-size:10px</code>
<code>font-color:#FFF</code>
<code>}</code>
<code></code>
</p>

我认为我想用</code> str_replace或preg_replace每个换行符 <code>。但是,我无法解决如何仅在<p class="code"></p>

之间进行的操作

一如既往,感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我为你的问题汇总了一个快速而肮脏的解决方案。它不包含.code段中的其他属性(您很可能需要将第一个explode更改为preg_split并使用一些正则表达式来实现这一点。

它可能不是最佳方式来解决您的问题,但它似乎适用于您声明的要求。

function codify($string){
    $final = '';
    $array = explode('<p class="code">',$string);
    if(count($array)){
        foreach($array as $k=>$str){
            if($k == 0){
                $final .= $str;
            }
            else{
                $tmp = explode("</p>",$str);
                $tmp2 = explode("\n",$tmp[0]);
                $final .= "<p class=\"code\">\n<code>".implode("</code>\n<code>",$tmp2)."</code>\n</p>".implode("</p>",array_slice($tmp,1));
            }
        }
    }
    else{
        $final = $string;
    }
    return $final;
}