匹配并替换输出的第一个<p>段落内容?</p>

时间:2012-11-01 18:19:54

标签: php regex preg-replace

我有通过Wordpress输出的内容,并在内容周围包含段<p>标记。我需要删除第一个<p></p>内的内容。我该怎么做?

例如,输出为:

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

我想删除第<p>Posted by Bob</p>行,剩下的就行了。

2 个答案:

答案 0 :(得分:2)

通常,you should not parse HTML with regex

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

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

重要的事情是

  • ?使.*不合适(以便尽快停止,直至最后</p>
  • 修饰符s,以便.能够匹配新行
  • 限制1,以便只删除第一个匹配

如果您只想删除标记的内容(所以如果您想保留一个空段落),只需使用<p></p>作为替换字符串。

然而,正如我所说,这仍然不是一个完美的解决方案。考虑评论中的<p>标记,或具有属性甚至无效HTML的<p>标记。 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

答案 1 :(得分:0)

如果您有权访问jQuery,可以使用以下命令:

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

要在WordPress中包含jQuery,请在<head></head>中添加以下内容:

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

这包括jQuery以安全的方式,并防止与jQuery或其他库的其他实例的任何冲突。