PHP将每个段落拆分为数组

Posted

技术标签:

【中文标题】PHP将每个段落拆分为数组【英文标题】:PHP split each paragraph into array 【发布时间】:2015-07-10 01:37:02 【问题描述】:

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

我目前的方法不起作用:

$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>'
);

【问题讨论】:

【参考方案1】:

你可以像下面这样使用 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>
)

【讨论】:

很棒的解决方案。【参考方案2】:

你忘记了属性限制,标志是 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>
)

【讨论】:

如果有嵌套段落(如果有的话)怎么办? @Letmesee:当然不能正常工作,但是为什么要嵌套段落呢?【参考方案3】:

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

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

这会将您在每个 &lt;/p&gt; 处的文本分成一个数组行 然后应用以下for循环添加&lt;/p&gt;

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

print_r($paragraphs);

【讨论】:

@pbaldauf 你试试我的答案吗,这对我来说很好【参考方案4】:

如果你确定每个结束标签都是准确的

,你可以使用explode:
  $paragraphs = explode('</p>', $text);

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

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

【讨论】:

它是否给出了结束标签不是&lt;/p&gt;的情况?

以上是关于PHP将每个段落拆分为数组的主要内容,如果未能解决你的问题,请参考以下文章

PHP 将新行转换为段落

如何将内容段落转换为存储在 mysql 中?

Python将一个大文件按段落分隔为多个小文件的简单方法

以编程方式将段落标题添加到 UITextView

关闭Wordpress中的wpautop(自动将双线分隔符转换为段落)

从段落中提取句子的 SQL 查询