我想将每个段落分成一个数组。
我目前的做法不起作用:
$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>'
);
答案 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);