【问题标题】:How to wrap all fragments (that are not inside of <div> or <h>) with <p>?如何用 <p> 包装所有片段(不在 <div> 或 <h> 内)?
【发布时间】:2014-10-05 15:09:31
【问题描述】:

我有一个代码:

$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 中实现呢?

根据一些打开/关闭段落的计数器,我正在考虑用&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;p&gt; 替换每个空行。但这会迫使用户在每个&lt;/h1&gt; 之后创建这样的新行。

也许一些正则表达式可以完成这项工作,而不会将用户限制为“您必须在&lt;/h1&gt;&lt;h1&gt; 之前创建新行”?

方法越通用越好。

【问题讨论】:

    标签: php regex word-wrap


    【解决方案1】:

    下面的否定前瞻断言该行不包含&lt;h1&gt;&lt;div&gt; 标记。如果是,则将整行的内容捕获到第 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>
    

    【讨论】:

      猜你喜欢
      • 2011-03-31
      • 1970-01-01
      • 2015-09-10
      • 1970-01-01
      • 1970-01-01
      • 2019-12-07
      • 1970-01-01
      • 2011-03-21
      • 2016-12-20
      相关资源
      最近更新 更多