Php 替换双换行符,标记时除外

Php 替换双换行符,标记时除外,php,regex-negation,Php,Regex Negation,我有一些db内容作为变量,我想把双线分隔变成.. 对于单行换行符,我要添加 我可以使用以下方法进行此操作: $content = nl2br($content, false); $content = '<p>' . preg_replace('#(<br>[\r\n\s]+){2}#', '</p><p>', $content) . '</p>'; $content=nl2br($content,false); $content=“”

我有一些db内容作为变量,我想把双线分隔变成
..

对于单行换行符,我要添加

我可以使用以下方法进行此操作:

$content = nl2br($content, false);
$content = '<p>' . preg_replace('#(<br>[\r\n\s]+){2}#', '</p><p>', $content) . '</p>';
$content=nl2br($content,false);
$content=“”。preg#u replace(“#(
[\r\n\s]+){2}#,”

,$content)。”

",;
但是,我需要排除包含h2、h3、h4、ul和ul标签的段落。但是我仍然需要在其他HTML标记周围添加p标记,例如

ccccc
ccccc
Nunc nec sem ac Nunc tincidunt ALIQUA ut nec dolor。无便利条件。
临时turpis的Vivamus vel,非rutrum quam。猫斜角肌悬吊术。
Nunc nec
Nunc nec
Nunc nec

Vivamus vel Temporal turpis

&mdash;xxxxx(@xxxxxx)
您应该在下面的列表中添加:

<h2>Lorem ipsum dolor sit amet, consectetur adipiscing elit</h2>

Vivamus vel tempor turpis, <strong>non rutrum quam</strong>. Suspendisse ac rhoncus felis, eget porta lectus. 

Nam vulputate sapien risus, vel vehicula mi volutpat sed. 

<ul>
<li>Sed feugiat nibh at nisl eleifend scelerisque.</li>
<li>Aliquam non maximus ipsum. Aliquam erat volutpat.</li>
</ul>

<h3>Praesent eget diam sit amet leo vehicula sagittis at quis tortor</h3>

Nunc nec sem ac nunc tincidunt aliquam ut nec dolor. Nulla facilisi.

<img alt="xxxx" src="xxx.png" class="xxxxx"/> 

<caption><i>ccccc</i></caption> 

<img alt="xxxx" src="xxx.png" class="xxxxx"/> 

<i>ccccc</i>

<strong>Nunc nec sem ac nunc tincidunt aliquam ut nec dolor. Nulla facilisi.</strong>

Vivamus vel tempor turpis, <strong>non rutrum quam</strong>. Suspendisse ac rhoncus felis, eget porta lectus.

Nunc nec
Nunc nec
Nunc nec

<blockquote class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr">Vivamus vel tempor turpis <a href=""></a></p>&mdash; xxxxx (@xxxxxx) <a href="https://twitter.com/xxxx/status/x?ref_src=x">February 15, 2019</a></blockquote>

<script async src="" charset="utf-8"></script>
$content=''。preg#u replace(“#([\\r\n\s]{2})”,“

”,$content)。”

",;
我建议不要使用
nl2br()
函数——您将在不需要标记的地方到处插入

标记

相反,我建议您直接在换行符之外执行正则表达式,忽略已经被标记包围的行,如下所示:


(?i)^(?)((-是这样吗?谢谢。几乎有效,但它提供了

    很好!虽然在某些情况下我确实需要添加。

    我正在更新问题…此外,如果单换行符,我希望有
    且不在itI周围添加p标记,我更新了我的答案。没有解决单换行符的用例,因为这超出了原始问题,但这应该可以让您达到90%的效果。谢谢。奇怪的是,它对测试中的内容有效,但在应用于脚本中的变量时无效。\n保持不变,就像它无法识别它们来应用正则表达式一样。我试着在成为正则表达式之前输出变量并将其复制到测试仪上,它可以是的,但不是在我的脚本中!下次当我在计算机前时,我将通过php脚本为您运行它,我没有在regex fiddle之外进行测试
    $content = '<p>' . preg_replace('#([\<br\>\r\n\s]{2})#', '</p><p>', $content) . '</p>';
    
    $regex = '#(?i)^(?!((<\/|<)(h[1-6]|ul|li|script|blockquote)(\s.+)*>))(.+)(?!(<(\/\3)>))$#';
    $content = preg_replace($regex, "<p>$5</p>", $content);