PHP从字符串中删除第一个<p>和最后一个</p>标签

3
如何从字符串中删除第一个

和最后一个

标签?? 示例字符串:

$string = "<p>text text<br>text<p>text</p></p>";

dup : https://dev59.com/EnA75IYBdhLWcg3waIUJ - Haim Evgi
在添加这些无聊的<p>之前使用trim() - Your Common Sense
3个回答

23

尝试

$string = preg_replace('/<p[^>]*>(.*)<\/p[^>]*>/i', '$1', $string);

1
我添加了/is,因为我的字符串有多行。 - undefined

2
$string = "<p>text text<br>text<p>text</p></p>";

$pattern = "=^<p>(.*)</p>$=i";

echo preg_match($pattern, $string, $matches). "<br />" ;
var_dump($matches);

给我:
1<br />
array(2) {
  [0]=>
  string(35) "<p>text text<br>text<p>text</p></p>"
  [1]=>
  string(28) "text text<br>text<p>text</p>"
}

注意,我在模式行方面犯了一个错误。i应该在$和=之间($i=),但实际上应该像$=i一样。请在您自己的代码中进行编辑。如果您恰好在同一范围内使用了变量i,则可能会导致意外错误。 - Daan Timmer
preg_replace 也可以,但 preg_match 提供了更多返回值的控制。如果用户输入无效(<p>tekst1<p>tekst2</p>tekst3</p>tekst4),使用 preg_match 将返回 false 和一个空数组,而 preg_replace 将返回“主题”字符串。因此,您可以将其置于 if 语句中以验证输入。我总是更喜欢用 preg_match 包含 preg_replace。感觉更安全。 - Daan Timmer

0

试试这个!!!

$s="  <p>  Hello world  </p>  ";
$s = trim(preg_replace('#^<p>|</p>$#i', '', trim($s)));
echo '<p><textarea >'.$s.'</textarea>';

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接