【问题标题】:PHP split each paragraph into arrayPHP将每个段落拆分为数组
【发布时间】: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>'
);

【问题讨论】:

    标签: php html regex split


    【解决方案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;的情况?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 2013-05-21
    • 1970-01-01
    • 1970-01-01
    • 2020-09-21
    相关资源
    最近更新 更多