【问题标题】:preg_replace: add whitespace into paragraphspreg_replace:在段落中添加空格
【发布时间】:2017-07-23 16:04:20
【问题描述】:

我可以在所有段落中添加空格吗?

我有一个这样的字符串:

<p>1st paragraph</p>
<p></p>
<p>2nd paragraph</p>
<p></p>
<p>3rd paragraph</p>

我希望得到像所有段落中的空白一样的结果

<p> 1st paragraph</p>
<p> </p>
<p> 2nd paragraph</p>
<p> </p>
<p> 3rd paragraph</p>

有人知道如何使用preg_replace 或其他更好的方法吗?

【问题讨论】:

  • 请添加您的代码。
  • 不是最简单的方法不是:str_replace('&lt;p&gt;', '&lt;p&gt; ', $yourstring);
  • @OscarHo,如果你看看minimal reproducible example,它将有助于提高你的问题质量。当有人给你一个有效的答案时,“接受”这个答案被认为是一种很好的形式,这样这个人就可以获得声誉积分,其他读者知道哪个答案可能对他们有用。

标签: php regex preg-replace


【解决方案1】:

明显的解决方案是:

<?php
$markup = <<<HTML
<p>1st paragraph</p>
<p></p>
<p>2nd paragraph
which spans over
three line</p>
<p></p>
<p>3rd paragraph</p>
HTML;

$result = preg_replace('|<p>(.*?)</p>|us', '<p> $1</p>', $markup);
var_dump($result);

上面代码的输出是:

string(111) "<p> 1st paragraph</p>
<p> </p>
<p> 2nd paragraph
which spans over
three line</p>
<p> </p>
<p> 3rd paragraph</p>"

【讨论】:

  • 你没有考虑多行段落...为什么打开&lt;p&gt;后匹配部分?
  • facebook的即时文章警告段落标签不能为空,我有很多段落标签不包含任何文本
  • @revo 关于捕获开始标签之后的部分......当然可以简单地替换标签,一切都很好。但最终这在一定程度上取决于 OP究竟想要什么。由于这含糊不清,我更喜欢上述解决方案。
猜你喜欢
  • 2013-08-18
  • 1970-01-01
  • 2013-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-21
相关资源
最近更新 更多