Удалить все теги из строки, кроме определенного регулярного выражения - PullRequest
0 голосов
/ 04 августа 2020

Я написал это регулярное выражение :

<span class="icon(.*?)><\/span>

И у меня есть строка:

<p style="text-align: center;"><span style="font-size: 1em;">Text 1 <span style="font-weight: bold;">TEXT 2</span><span style="color: #e67e23; font-size: 1.2em;"><span class="icon x-small icon-play"></span>&nbsp;</span><span style="color: #e03e2d;">Text 3</span> <span style="color: #a68965;">Text 4 </span></span><span style="font-size: 0.7em; color: #000000;">Text 5</span></p>

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

Text 1 Text 2<span class="icon x-small icon-play"></span>&nbsp;Text 3 Text 4 Text 5

Как вы можете видеть в этом выводе, все теги были очищены, кроме тега, который я ищу.

Я взглянул на PHP s strip_tags, но, к сожалению, они не принимают регулярное выражение в качестве второго параметра, поэтому не делают то, что я ищу. Я попытался сделать это с помощью preg_replace, но мне не удалось создать такое сложное регулярное выражение.

Любая идея о том, как лучше всего это сделать, будь то регулярное выражение или нет ?

1 Ответ

2 голосов
/ 04 августа 2020

Используйте

preg_replace('/<span class="icon.*?><\/span>(*SKIP)(*F)|<[^<>]+>/', '', $string)

См. proof

Выражение найдет <span class="icon....></span> строки, чтобы игнорировать их с помощью (*SKIP)(*F), а затем все остальные теги будут удалены (соответствует <[^<>]+>).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...