Найти все совпадения между разделителями

Как заменить все теги <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 за их пределами.

Попробуйте использовать ''\w*/<\?p>/i\w*''

Digvijaysinh Gohil 14.07.2018 07:09

@DigvijaysinhGohil Это регулярное выражение вообще не работает.

loneFinder 14.07.2018 07:13
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
3
2
84
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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>

Ваш код работает с предоставленным текстом, но таких блоков несколько. Я редактировал вопрос. С помощью этого кода теги p, которые я не хочу удалять, также удаляются, т.е. удаляются все теги p из первого и последнего.

loneFinder 14.07.2018 13:10

Большое спасибо за этот замечательный ответ. На самом деле я нашел способ добиться того же результата с помощью preg_replace() и цикла for, но это лучшее решение.

loneFinder 14.07.2018 16:03

Другие вопросы по теме