使用PHP仅在字符串中删除第一个<p>和最后一个</p>

时间:2015-11-16 10:31:05

标签: php preg-replace

我已经为这个问题找到了一些preg_replace解决方案,最接近的解决方案就是:

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

然而,这剥夺了所有<p>&amp; </p>个标签。如何将此调整为仅剥离第一个<p>和最后</p>个标记,即使其他此类标记位于我的字符串中的其他位置?

非常感谢!

2 个答案:

答案 0 :(得分:1)

使用额外参数为1。 看这篇文章。 Using str_replace so that it only acts on the first match?

对于最后一个p标签,请使用后面的搜索。或者你可以反转字符串搜索并从开始替换。别忘了相应地改变正则表达式。

你的第一个正则表达式可能是这样的

$str=preg_replace('/<p>/', '', $str,1);

现在反转字符串并执行相同操作但更改正则表达式。

$str=strrev ($str);

$str=preg_replace('/>p\/</', '', $str,1);

现在再次反转字符串

$str=strrev ($str);

答案 1 :(得分:0)

考虑到理解代码会很费时,我会根据这些讨论使用str_replace:

Using str_replace so that it only acts on the first match?

PHP Replace last occurrence of a String in a String?

类似于:

// Remove first occurrence of '<p>'
$pos = strpos( $string, '<p> );
if( $pos !== false ){
    $string = substr_replace( $string, '<p>', $pos, 3 );
}
// Remove last occurrence of '<p>'
$pos = strrpos( $string, '</p>' );
if( $pos !== false ){
    $string = substr_replace( $string, '</p>', $pos, 3 );
}