【问题标题】:Match and Replace first <p> paragraph contents of output?匹配并替换输出的第一个 <p> 段落内容?
【发布时间】:2012-11-01 18:19:54
【问题描述】:

我有通过 Wordpress 输出的内容,它在内容周围包裹了段落 &lt;p&gt; 标签。我需要删除第一个 &lt;p&gt;&lt;/p&gt; 中的内容。我该怎么做?

例如输出为:

<p>Posted by Bob</p>
<p>This is the content here</p>
<p>This is the second paragraph</p>

我想删除&lt;p&gt;Posted by Bob&lt;/p&gt; 行并保留其余部分。

【问题讨论】:

  • 您是要替换内容还是删除整个标签?

标签: php regex preg-replace


【解决方案1】:

一般情况下,you should not parse HTML with regex

在这种情况下,正则表达式解决方案可能工作正常:

$str = preg_replace('~<p>.*?</p>~s', '', $str, 1);

重要的是

  • ? 使.* 不贪婪(以便它尽快停止并且直到最后一个&lt;/p&gt;
  • 修饰符s 使. 能够匹配换行符
  • 限制1,以便只删除第一个匹配项

如果你只想删除标签的内容(所以如果你想保留一个空段落),只需使用&lt;p&gt;&lt;/p&gt;作为替换字符串。

但是,正如我所说,这仍然不是一个完美的解决方案。想想 cmets 中的 &lt;p&gt; 标签,或具有属性甚至无效 HTML 的 &lt;p&gt; 标签。 PHP 带有DOM parser。如果你可以使用第三方库,还有this one,使用起来相当方便,几乎可以解决问题:

require "simple_html_dom.php";

$html = new simple_html_dom($input);
$html->load($input);

$html->find('p', 0)->outertext = "";

$output = $html->save();

同样,如果您只想清空标签但保留它,请将outertext 替换为innertext

【讨论】:

    【解决方案2】:

    如果您可以访问 jQuery,则可以使用以下内容:

    $("p:first-child").text("Hello World!");
    

    要在 WordPress 中包含 jQuery,请在您的 &lt;head&gt;&lt;/head&gt; 中添加以下内容:

    <?php wp_enqueue_script("jquery"); ?>
    <?php wp_head(); ?>
    

    这以安全的方式包含 jQuery,并防止与其他 jQuery 实例或其他库发生冲突。

    【讨论】:

      猜你喜欢
      • 2021-10-12
      • 1970-01-01
      • 2014-08-04
      • 2021-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-19
      • 2014-06-18
      相关资源
      最近更新 更多