PHP将每个段落分成数组

时间:2015-04-30 11:13:59

标签: php html regex split

我想将每个段落分成一个数组。

我目前的做法不起作用:

$paragraphs = preg_split( '|</p>|', $text, PREG_SPLIT_OFFSET_CAPTURE );

我如何从中得到:

$text = <<<TEXT
        <p>Hello!</p>
        <p style="border: 1px solid black;">How are you,<br /> today?</p>
TEXT;

到这个

$paragraphs = array(
     '<p>Hello!</p>',
     '<p style="border: 1px solid black;">How are you,<br /> today?</p>'
);

4 个答案:

答案 0 :(得分:10)

您可以使用DOMDocument(),如下所示

 <?php
$text = <<<TEXT
    <p>Hello!</p>
    <p style="border: 1px solid black;">How are you,<br /> today?</p>
TEXT;

$dom = new DOMDocument();
$paragraphs = array();
$dom->loadHTML($text);
foreach($dom->getElementsByTagName('p') as $node)
{

    $paragraphs[] = $dom->saveHTML($node);

}
print_r($paragraphs);
?>

<强>输出

Array
(
  [0] => <p>Hello!</p>
  [1] => <p style="border: 1px solid black;">How are you,<br> today?</p>
)

答案 1 :(得分:3)

你已经忘记了attribut限制,标志是PREG_SPLIT_DELIM_CAPTURE

$text = <<<TEXT
        <p>Hello!</p>
        <p style="border: 1px solid black;">How are you,<br /> today?</p>
TEXT;
$paragraphs = preg_split( '|(?<=</p>)\s+(?=<p)|', $text, -1, PREG_SPLIT_DELIM_CAPTURE);
//                                                here __^^


print_r($paragraphs);

<强>输出:

Array
(
    [0] =>         <p>Hello!</p>
    [1] => <p style="border: 1px solid black;">How are you,<br /> today?</p>
)

答案 2 :(得分:2)

他们的方式可能很多...... 您也可以按照以下步骤操作。

$array = explode("</p>", $text);

这会将每个</p>的文本分成数组行 然后应用以下for循环添加</p>

foreach($array as $row)
{ 
  $paragraphs[] = $row."</p>";
}

的print_r($段落);

答案 3 :(得分:0)

如果你确定每个结束标记都是

,你可以使用explode:

  $paragraphs = explode('</p>', $text);

否则,如果可能有任何空间你必须使用正则表达式:

  $paragraphs = preg_split('/<\/\s*p\s*>/', $text);