如何包装所有片段(不在里面)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?的主要内容,如果未能解决你的问题,请参考以下文章

sql里面 with...as 是啥意思啊?如何使用

如何组合绑定片段而不将它们包装在 XML 文字中

如何使 Swig 正确地将在 C 中修改的 char* 缓冲区包装为 Java Something-or-other?

json 可视代码工作室Angular with Firebase片段

Android N requires the IDE to be running with Java 1.8 or later

DDD with L2S or NHibernate... 关于业务对象的持久化数据