我正在从一个格式非常错误的页面卷曲。我正在尝试将其解析为段落的页面中有一个特定的片段。该输入代码段可以被一个或多个或标签分开<p>
和/</p>
或分开。如果有两个标签,我不希望它们成为两个单独的象形文字。<br>
<br/>
<br>
我正在尝试解析/显示的当前代码是
$paragraphs = preg_split('/(<\s*p\s*\/?>)|(<\s*br\s*\/?>)|(\s\s+)|(<\s*\/p\s*\/?>)/', $article, -1, PREG_SPLIT_NO_EMPTY);
$paragraphcount = count($paragraphs);
for($x = 1; $x <= $paragraphcount; $x++ )
{
echo "<p>".$paragraphs[$x-1]."</p>";
}
但是,这不能按预期方式工作。一些不同的输入/输出如下:
输入1: first part </p> <p> second part </p> <p> third part </p> <p> fourth part <br/>
输出1: <p>first part </p><p> </p><p>second part </p><p> </p><p> third part </p><p> </p><p>fourth part</p><p> </p>
我的代码被分析输入成段; 但是,它还会添加仅包含空格的额外段落。
任何帮助,将不胜感激。
如果输入有所不同,则输入为UTF-8。
这是一个解决方案preg_replace
:
$article = "first part </p> <p> second part </p> <p> third part </p>
<p> fourth part <br/> <br> fifth part";
$healed = substr(
preg_replace('/(\s*<(\/?p|br)\s*\/?>\s*)+/u', "</p><p>", "<p>$article<p>"),
4, -3);
它首先将字符串包装起来<p>
,然后替换breaks的变体(重复)</p><p>
,最后删除开始</p>
和结束<p>
。请注意,这不会产生(中间)数组,而是最终的字符串。
echo $healed;
输出:
<p>first part</p><p>second part</p><p>third part</p><p>fourth part</p><p>fifth part</p>
请注意,您需要在正则表达式的末尾使用u
修饰符才能获得UTF-8支持。
另一方面,如果您需要数组中的段落,preg_split
则更适合(使用相同的正则表达式):
$paragraphs = preg_split('/(\s*<(\/?p|br)\s*\/?>\s*)+/u',
$article, null, PREG_SPLIT_NO_EMPTY);
如果您再写:
foreach ($paragraphs as $paragraph) {
echo "$paragraph\n";
}
你得到:
first part
second part
third part
fourth part
fifth part
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句