我已经为这个问题找到了一些preg_replace解决方案,最接近的解决方案就是:
$string = preg_replace('/<p[^>]*>(.*)<\/p[^>]*>/i', '$1', $string);
然而,这剥夺了所有<p>
&amp; </p>
个标签。如何将此调整为仅剥离第一个<p>
和最后</p>
个标记,即使其他此类标记位于我的字符串中的其他位置?
非常感谢!
答案 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 );
}