使用正则表达式捕获几个\ n的行

时间:2013-08-02 08:28:25

标签: php regex

我有这种代码:

<br>
Réaménagement des éclairages : Couloir de circulation de l'accueil – Salle de restauration de l'EHPA Résidence «
        Loubayssens »

</td>

我试图获得:

<p>Réaménagement des éclairages : Couloir de circulation de l'accueil – Salle de restauration de l'EHPA Résidence «
        Loubayssens »
</p>

我想删除<br>代码,并在<p>代码中封装文字行 但是当它在几行上时,我无法捕捉到整行文字。

我试试:

<pre>
$pattern = '/<br>(\s*)([\w]([.*]|[\n])[\S|\w])(\s*)<\/td>/i';
$replacement = "\<p>$2</p></td>";
$source = preg_replace($pattern, $replacement, $source);
</pre>

我也尝试/但是不起作用。

你能给我一些提示吗?

3 个答案:

答案 0 :(得分:0)

使用此正则表达式<br>([\w\W\n]+)</td>这将获得标记br和td内的所有内容,包括\ n。点击this link获取详细示例。

this link替换为<p>

答案 1 :(得分:0)

使用DOMDocument删除br标记中的td标记并使用p标记封装文本以及从开头和结尾删除空格的非常简单的示例:

<?php
$str = <<<HTML
<table>
<tr>
<td>
<br>
    Réaménagement des éclairages : Couloir de circulation de l'accueil – Salle de restauration de l'EHPA Résidence «
            Loubayssens »

</td>
<tr>
</table>
HTML;

$dom = new DOMDocument();
$dom->loadHTML($str);
$td = $dom->getElementsByTagName('td')->item(0);
foreach($td->childNodes as $child)
{
    if ($child->nodeName == 'br')
        $td->removeChild($child);
}
$element = $dom->createElement('p', trim($td->nodeValue));
$td->parentNode->replaceChild($element, $td);
echo $dom->saveHTML();

<强> Live DEMO.

答案 2 :(得分:0)

试试这个正则表达式模式:

$pattern = '/<br>([^<]*)<\/td>/i';
$replacement = "<p>$1</p></td>";
$source = preg_replace($pattern, $replacement, $source);

简单而肮脏的解决方案,比使用解析器浪费你的时间来完成一项简单的任务更好......