如何包装所有片段(不在里面)or) with?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何包装所有片段(不在里面)or) with?相关的知识,希望对你有一定的参考价值。

我有一个代码:

$html = 
'<h1>Headline</h1>
That should be paragraph 1.

That should be paragraph 2.

<div>Something.</div>
That should be paragraph 3.
';

我想将其改为:

$html = 
'<h1>Headline</h1>
<p>That should be paragraph 1.</p>

<p>That should be paragraph 2.</p>

<div>Something.</div>
<p>That should be paragraph 3.</p>
';

但是如何在php中实现它?

我正考虑用<p></p></p><p>替换每个空行,基于打开/关闭段落的一些计数器。但这将迫使用户在每个</h1>之后制作这样的新线。

也许一些正则表达式可以完成这项工作,而不会限制用户“你必须在</h1>之后和<h1>之前制作新的线条”?

方法越普遍越好。

答案

下面的负向前瞻声明该行不包含<h1><div>标签。如果是,那么它将整行的内容捕获到组1中。

^(?!.*?(?:<h1>|<div>))(.+)$

替换字符串:

<p>$1</p>

DEMO

码:

<?php
$string = <<<EOT
<h1>Headline</h1>
That should be paragraph 1.

That should be paragraph 2.

<div>Something.</div>
That should be paragraph 3.
EOT;
echo preg_replace('~^(?!.*?(?:<h1>|<div>))(.+)$~m', '<p>$1</p>', $string)
?>

输出:

<h1>Headline</h1>
<p>That should be paragraph 1.</p>

<p>That should be paragraph 2.</p>

<div>Something.</div>
<p>That should be paragraph 3.</p>

以上是关于如何包装所有片段(不在里面)or) with?的主要内容,如果未能解决你的问题,请参考以下文章