我需要拆分由paragraph标签分隔的文本

时间:2012-01-06 12:31:54

标签: php html arrays

$text = "<p>this is the first paragraph</p><p>this is the first paragraph</p>";

我需要将上面的内容拆分成由段落标记分隔的数组。也就是说,我需要将上面的内容拆分为一个包含两个元素的数组:

array ([0] = "this is the first paragraph", [1] = "this is the first paragraph")

8 个答案:

答案 0 :(得分:20)

删除关闭的</p>代码,因为我们不需要它们,然后在打开</p>代码时将字符串分解为数组。

$text = "<p>this is the first paragraph</p><p>this is the first paragraph</p>";
$text = str_replace('</p>', '', $text);
$array = explode('<p>', $text);

要查看代码运行,请参阅以下codepad entry。正如您所看到的,此代码将为您提供索引0处的空数组条目。如果这是一个问题,则可以在使用数组之前通过调用array_shift($array)轻松删除它。

答案 1 :(得分:10)

对于其他发现此问题的人,请不要忘记P标签可能包含样式,ID或任何其他可能的属性,因此您应该看看这样的内容:

$ps = preg_split('#<p([^>])*>#',$input);

答案 2 :(得分:1)

$text = "<p>this is the first paragraph</p><p>this is the first paragraph</p>";

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

echo $exptext[0];
echo "<br>";
echo $exptext[1];

////////////////输出/////////////////

这是第一段 这是第一段

答案 3 :(得分:1)

这是一个古老的问题但是我在一小时内找不到任何合理的解决方案来寻找stactverflow答案。如果你有完整的html标签(p标签),如果你想得到段落(或第一段),请使用DOMDocument

$long_description是一个包含<p>个标记的字符串。

$long_descriptionDOM = new DOMDocument();
// This is how you use it with UTF-8
$long_descriptionDOM->loadHTML((mb_convert_encoding($long_description, 'HTML-ENTITIES', 'UTF-8')));
$paragraphs = $long_descriptionDOM->getElementsByTagName('p');
$first_paragraph = $paragraphs->item(0)->textContent();

我想这是正确的解决方案。不需要正则表达式。你不应该使用正则表达式解析html。

答案 4 :(得分:0)

试试这段代码:

<?php
$textArray = explode("<p>" $text);

for ($i = 0; $i < sizeof($textArray); $i++) {
    $textArray[$i] = strip_tags($textArray[$i]);
}

答案 5 :(得分:0)

如果您的输入有些一致,您可以使用简单的拆分方法:

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

preg_split会查找<p></p>的组合加上可能的空格并将字符串分开。

作为不必要的替代方案,您还可以使用 提取仅使用以下内容完成段落内容:

 foreach (htmlqp($text)->find("p") as $p) { print $p->text(); }

答案 6 :(得分:0)

尝试以下方法:

<?php
$text = "<p>this is the first paragraph</p><p>this is the first paragraph</p>";

$array;

preg_replace_callback("`<p>(.+)</p>`isU", function ($matches) {
    global $array;
    $array[] = $matches[1];
}, $text);

var_dump($array);

?>

这可以修改,将数组放在一个使用add value方法和getter管理它的类中。

答案 7 :(得分:0)

试试这个。

<?php
$text = "<p>this is the first paragraph</p><p>this is the first paragraph</p>";
$array = json_decode(json_encode((array) simplexml_load_string('<data>'.$text.'</data>')),1);
print_r($array['p']);
?>