查找分度计之间的所有匹配项

时间:2018-07-14 04:37:21

标签: php regex preg-replace preg-replace-callback

如何替换定界符之间的所有<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标签。

1 个答案:

答案 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>