Удалить пользовательские теги для страницы amp в строке html с помощью php

Я не очень хорошо пишу регулярные выражения, поэтому прошу помощи.

У меня есть html-строка моей страницы. Я хочу преобразовать строку html в страницу, совместимую с Google AMP. В котором я хочу заменить некоторые пользовательские теги html.

<define:dos> This string explains DOS.</define:dos>

И на выходе должен быть только This string explains DOS.

В моей строке html есть несколько строк, начинающихся с <define:, я попытался удалить их, написав отдельный preg_replace для каждого тега, который работает, как ожидалось:

$html = preg_replace('#<define:wlan>#i', '', $html);
$html = preg_replace('#<define:wifi>#i', '', $html);
$html = preg_replace('#<define:dos>#i', '', $html);

И так далее

Я пробовал что-то из следующего, но не получилось :(

$html = preg_replace('#\<define[^\]>*\](.*?)\</define\>#m', "$1", $html);

Мне нужно для этого универсальное решение. Пожалуйста помоги.

Заранее спасибо.

0
0
253
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать

<(define:[^>]+>)(.*?)<\/\1

и замените второй захваченной группой, \2.

https://regex101.com/r/wZQBuM/2

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

Hemantwagh07 10.09.2018 08:19

Смотрите редактировать, просто замените второй захваченной группой

CertainPerformance 10.09.2018 08:20

У меня сработало :). Спасибо. У меня был еще один сценарий, когда у меня был только запуск тега, поэтому я решил его, написав правило <(define: [^>] +>). Просто хочу подтвердить, что это реальное решение - написать его два раза?

Hemantwagh07 10.09.2018 09:37

Конечно, выглядит нормально

CertainPerformance 10.09.2018 10:27

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