Php 在文本中插入段落,代码块内除外

Php 在文本中插入段落,代码块内除外,php,regex,Php,Regex,我将HTML段落()插入到一段文本中,如下所示: $text = '<p>' . preg_replace("/(\n|\r|\r\n)+/i", "</p><p>", $text) . '</p>' ; 永远不要尝试用正则表达式解析HTML 例如,使用PHP的DOM: :)嗯,使用PCRE正则表达式引擎是可能的。然而,这是一个高度非理性和资源沉重的问题 $text = '<p>' . preg_replace("/(\n|\r|\r

我将HTML段落(

)插入到一段文本中,如下所示:

$text = '<p>' . preg_replace("/(\n|\r|\r\n)+/i", "</p><p>", $text) . '</p>' ;

永远不要尝试用正则表达式解析HTML

例如,使用PHP的DOM:


:)

嗯,使用PCRE正则表达式引擎是可能的。然而,这是一个高度非理性和资源沉重的问题

$text = '<p>' . preg_replace("/(\n|\r|\r\n)+(?!(.(?!<code>))*<\/code>)|(\n|\r|\r\n)+(?=<code>)/is", "</p><p>", $text) . '</p>' ;
$text=''。preg|u replace(“/(\n |\r | \r\n)+(?!((?!
)*))*)(\n |\r |\r\n)+(?=
)/is“,“

,$text)。”

",;
如果您可以在这个操作上花费一些额外的RAM,那么使用DOM可能是最好的解决方案。
如果没有,您可以预先将字符串拆分为
<代码>
和其他一切,而不是在
以外的块上使用正则表达式,然后将其粘回到字符串中。

对不起。此文本“第一行\n\n\r第二行\r\n第三行\r第四行”将变为“第一行

第二行

第三行

第四行

”。我知道CSS是用来设计样式的,但是HTML仍然告诉CSS在哪里应用这些样式。你想使用HTML工具包来实现这一点。看,这是PHP标准安装的一部分,还是我需要单独安装的东西?如果是后者,我可能无法访问它(当然可以检查)。@MCXXII:libxml的
libxml
需要安装。虽然它是默认安装的,但我认为。您可以通过执行以下操作来检查已安装的扩展:
phpinfo()它已安装。我可能会在某个时候调查一下。谢谢你的链接,谢谢。把它分开的想法似乎是个好主意。我根据这个建议编辑了我的解决方案。它似乎起作用了。我不知道这是否是最有效的方法,也许我会找时间研究DOM。
$text = '<p>' . preg_replace("/(\n|\r|\r\n)+(?!(.(?!<code>))*<\/code>)|(\n|\r|\r\n)+(?=<code>)/is", "</p><p>", $text) . '</p>' ;