Как заменить все теги <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, если нет другого текста вне разделителей, используя регулярное выражение /</?p>/i, но как я могу сопоставить все теги p внутри разделителей, если есть текст и другие теги p за их пределами.
@DigvijaysinhGohil Это регулярное выражение вообще не работает.






Это работа для 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>
Ваш код работает с предоставленным текстом, но таких блоков несколько. Я редактировал вопрос. С помощью этого кода теги p, которые я не хочу удалять, также удаляются, т.е. удаляются все теги p из первого и последнего.
Большое спасибо за этот замечательный ответ. На самом деле я нашел способ добиться того же результата с помощью preg_replace() и цикла for, но это лучшее решение.
Попробуйте использовать
''\w*/<\?p>/i\w*''