在每个完整的段落标记

时间:2016-09-29 09:47:10

标签: php split implode

我正在尝试为我的字符串中的每个项目构建一个数组值,其周围有<p>个标签(打开和关闭课程)。

我现在拥有的:

$info = $contentcr[0]['fulltext'];
preg_match_all('%^(<p[^>]*>.*?</p>)$%im', $info, $infoarray);
$splitinfo = preg_split('%^(<p[^>]*>.*?</p>)$%im', $info, -1, PREG_SPLIT_DELIM_CAPTURE);

当我以某种方式打印$splitinfo这是我的数组时:

Array ( [0] =>
Afdeling: Bla & Bla

Locatie: ‘Stadhuis Rotterdam’ – Coolsingel 40 Rotterdam

Klant: Ontwikkelings

[1] =>
Bedrijf: Rotterdam Datum April 2013

[2] => )

这就是我的字符串($info)的样子:

<p>Afdeling: Bla &amp; Bla </p>
<p>Locatie: ‘Stadhuis Rotterdam’ – Coolsingel 40 Rotterdam</p>
<p>Klant: Ontwikkelings</p>
<p>Bedrijf: Rotterdam Datum April 2013</p>

如何将每个段落创建为单个数组值?

2 个答案:

答案 0 :(得分:0)

使用以下正则表达式:

preg_match_all('@<p[^>]*>(.*?)</p>@im', $info, $infoarray);

它将匹配任何<p></p>并选择内部内容(使用(.*?)非贪婪)。 preg_match_all将所有发现写入多维数组。第一个索引将包含完整匹配,而2..N将包含匹配的组列表。在我们的例子中:

array(2) {
  [0]=>
  array(2) {
    [0]=>
    string(10) "<p>adf</p>"
    [1]=>
    string(9) "<p>xy</p>"
  }
  [1]=>
  array(2) {
    [0]=>
    string(3) "adf"
    [1]=>
    string(2) "xy"
  }
}

将生成。我们现在可以选择第二部分:

if (count($infoarray) > 1) {
  // yes we found paragraphs!
  $paragraphs = $infoarray[1];
}

无需额外拆分。

答案 1 :(得分:0)

你可以在下面使用

$info = $contentcr[0]['fulltext'];
$splitinfo = preg_split('/(<\s*p\s*\/?>)|(<\s*br\s*\/?>)|(\s\s+)|(<\s*\/p\s*\/?>)/', $info, -1, PREG_SPLIT_NO_EMPTY);