PHP:剥离包裹段落标记

pws*_*068 4 php substr htmlpurifier strip-tags

我需要编写一个PHP函数来删除字符串中的开始和结束段落标记,但前提是它们位于开头/结尾.所以字符串:

"Simple Test"
"<p>Here</p>"
"<p>Test <p>Nested</p> Outside </p>"
Run Code Online (Sandbox Code Playgroud)

输出:

"Simple Test"
"Here"
"Test <p>Nested</p> Outside"
Run Code Online (Sandbox Code Playgroud)

HTMLPurifier可以这样做,还是应该使用substr?我的第一次尝试是:

if(strpos($str,'<p>') === 0  && strcmp(substr($str,-1,4),'</p>'))
$str = substr($str,3,strlen($str)-4);
Run Code Online (Sandbox Code Playgroud)

thi*_*dot 17

这是一个正则表达式解决方案:

$str = preg_replace('!^<p>(.*?)</p>$!i', '$1', $str);
Run Code Online (Sandbox Code Playgroud)

  • 他*希望*正则表达式保留嵌套的`<p>`标签 - 看问题中的第三个测试用例字符串.:S (3认同)