如何替换定界符之间的所有<p>
标签?我的文字是
<p>other text...</p>
<p>other text...</p>
``text text...</p>
<p>text text...</p>
<p>text text ...``
<p>other text...</p>
<p>other text...</p>
``text text...</p>
<p>text text...</p>
<p>text text ...``
<p>other text...</p>
<p>other text...</p>
``text text...</p>
<p>text text...</p>
<p>text text ...``
<p>other text...</p>
<p>other text...</p>
我想将双反引号之间的所有<p>
标签(作为此处的所有p标签)进行匹配,并将其替换为空字符串。如果使用正则表达式/<\/?p>/i
在分隔符外没有其他文本,我可以匹配p标签,但是如果在分隔符内没有文本和其他p标签,如何匹配分隔符内的所有p标签。
答案 0 :(得分:1)
这是preg_replace_callback的工作:
$str = <<<EOD
<p>other text...</p>
<p>other text...</p>
``text text...</p>
<p>text text...</p>
<p>text text ...``
<p>other text...</p>
<p>other text...</p>
``text text...</p>
<p>text text...</p>
<p>text text ...``
<p>other text...</p>
<p>other text...</p>
``text text...</p>
<p>text text...</p>
<p>text text ...``
<p>other text...</p>
<p>other text...</p>
EOD;
$res = preg_replace_callback(
'/``(?:(?!``).)*``/s',
function ($m) {
return preg_replace('~</?p>~', '', $m[0]);
},
$str);
echo $res;
输出:
<p>other text...</p>
<p>other text...</p>
``text text...
text text...
text text ...``
<p>other text...</p>
<p>other text...</p>
``text text...
text text...
text text ...``
<p>other text...</p>
<p>other text...</p>
``text text...
text text...
text text ...``
<p>other text...</p>
<p>other text...</p>