PHP preg_分割输入由<;br>&书信电报;br/>&书信电报;p>;分成不同的段落

PHP preg_分割输入由<;br>&书信电报;br/>&书信电报;p>;分成不同的段落,php,preg-replace,preg-match,preg-match-all,preg-split,Php,Preg Replace,Preg Match,Preg Match All,Preg Split,我正在从一个代码格式非常不正确的页面上卷曲。我正试图将页面的一个特定片段解析为段落。此输入片段可以被和分割,或者被一个或多个或标记分隔。如果有两个标记相继出现,我不希望它们是两个单独的pargaraphs 我当前试图解析/显示的代码是 $paragraphs = preg_split('/(<\s*p\s*\/?>)|(<\s*br\s*\/?>)|(\s\s+)|(<\s*\/p\s*\/?>)/', $article, -1, PREG_SPLIT_NO_

我正在从一个代码格式非常不正确的页面上卷曲。我正试图将页面的一个特定片段解析为段落。此输入片段可以被
分割,或者被一个或多个


标记分隔。如果有两个

标记相继出现,我不希望它们是两个单独的pargaraphs

我当前试图解析/显示的代码是

$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>";
    }
$parages=preg_split('/()()()()()()(\s\s+)()/',$article,-1,preg_split_NO_EMPTY);
$paragraphcount=计数($paragraphcount);

对于($x=1;$x这里有一个带有
preg\u 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>first part</p><p>second part</p><p>third part</p><p>fourth part</p><p>fifth part</p>
如果你写:

foreach ($paragraphs as $paragraph) {
    echo "$paragraph\n";
}
你会得到:

first part
second part
third part
fourth part
fifth part

下面是一个带有
preg\u 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>first part</p><p>second part</p><p>third part</p><p>fourth part</p><p>fifth part</p>
如果你写:

foreach ($paragraphs as $paragraph) {
    echo "$paragraph\n";
}
你会得到:

first part
second part
third part
fourth part
fifth part


您是如何内爆分割值的?您可能也在内爆空值;@chris85,对不起,我忘了提到我的输入有时是这样的:
第一部分
第二部分第三部分第四部分
这个问题现在看起来已经解决了吗?还有
$paragraphcount=count($段落);对于($x=1;$x感谢@chris85。我之所以有
$paragraphcount
,是因为我以不同的方式显示段落(但不是为了让事情更简单),这取决于段落的数量(段落的数量并不总是相同)是的,它已经解决了——除非有一种方法可以使用一个正则表达式来做任何事情,而不是像我扭曲@zahur sh的答案那样?你是如何内爆分割值的?你可能也在空值上内爆;@chris85,对不起,我忘了提到我的输入有时看起来像:
第一部分
第二部分

第三部分

第四部分
现在看来这已经解决了吗?还有
$paragraphcount=count($段落);for($x=1;$x感谢@chris85)。我之所以有
$paragraphcount
是因为我以不同的方式显示了段落(但在这里不是为了让事情更简单),这取决于段落的数量(段落的数量并不总是相同)。是的,这是可以解决的——除非有一种方法可以像我扭曲@zahur sh的答案那样使用一个正则表达式来完成所有事情。我使用了你的一个扭曲版本:
$parages=preg_split('/(\s*)(\s*)(\s*)(\s*)(\s+)(\s*)(\s*)(\s*))+/“,$article,-1,PREG_SPLIT_NO_EMPTY”);foreach($key=>,$value){if(strlen($value)<12){unset($pages[$key])}}$pages=array_values($pages);$paragraphcount=count($pages);for($x=1;$x我使用了你的一个扭曲版本:
$pages=PREG_SPLIT('/(\s*)(\s*))(\s*))(\s*))(\s*)(\s+))+/“,$article,-1,PREG_SPLIT_NO_EMPTY);foreach($key=>和$value的段落){if(strlen($value)<12){unset($pages[$key]);}}$pages parages=array_value($pages);$paragraphcount=count($pages);for($x=1;$x谢谢。我忘了提到我的输入有时看起来像:
第一部分
第二部分第三部分第四部分
第四部分
此外,我想用数组来显示它。这个输入有p标记,p标记之间只有一个或两个空格,p标记将它们表示为“部分”数组的。

啊,是的,尝试在正则表达式末尾使用
u
修饰符。PHP在处理unicode时很奇怪。但我们生活在2016年……令人惊讶的是,它仍然能做这样的事情。我在回答中添加了获得数组的方法,而不是“治愈”HTML。感谢您接受。让我知道这是否是您需要的。此网站:。也有关于PHP正则表达式功能的详细信息。使用侧菜单进行选择。谢谢。我忘了提到我的输入有时是这样的:
第一部分
第三部分第四部分
此外,我ant使用数组显示它。此输入具有p标记,p标记之间仅包含一个或两个空格,p标记将这些标记呈现为“部分”数组的。

啊,是的,尝试在正则表达式末尾使用
u
修饰符。PHP在处理unicode时很奇怪。但我们生活在2016年……令人惊讶的是,它仍然能做这样的事情。我在回答中添加了获得数组的方法,而不是“治愈”HTML。感谢您接受。如果这是您需要的,请告诉我。此网站:。还提供有关PHP正则表达式功能的详细信息。使用侧菜单进行选择。