Удалите все HTML-теги, кроме ссылок

Я пытаюсь написать регулярное выражение для удаления всего HTML, за исключением ссылок (теги <a href и </a> соответственно. Он не должен быть на 100% безопасным (меня не беспокоят атаки с использованием инъекций или что-то еще, поскольку я анализирую контент, который уже одобрен и опубликован в фильме SWF).

Исходным регулярным выражением для «полосовых тегов», которое я использую, было <(.|\n)+?>, и я попытался изменить его на <([^a]|\n)+?>, но это, конечно, позволит использовать любой тег, в котором есть а, а не тот, который имеет его в начале, с Космос.

Не то чтобы это действительно имело значение, но если кому-то интересно, я пишу это в ActionScript 3.0 для фильма Вспышка.

Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
27
0
18 065
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Как насчет

<[^a](.|\n)+?>

?

Это сохраняет <a>, но удаляет </a>

Christophe De Troyer 09.10.2014 15:42
Ответ принят как подходящий

<(?!/?a(?=>|\s.*>))/?.*?>

Попробуй это. Было что-то подобное для тегов p. Работал на них, поэтому не понимаю, почему бы и нет. Использует отрицательный просмотр вперед, чтобы проверить, что он не соответствует (с префиксом необязательного символа /), где (с использованием положительного просмотра вперед) за (с необязательным префиксом /) следует> или пробел, прочее, а затем>. Затем это соответствует до следующего символа>. Поместите это в подстановку с помощью

s/<(?!/?a(?=>|\s.*>))/?.*?>//g;

Это должно оставить только открывающий и закрывающий теги

Я продолжаю говорить об этом, но я не могу рекомендовать регулярное выражение слишком часто. Это фантастика для тестирования такого рода вещей.

В общем, с этим подходом есть проблемы. Регулярные выражения лучше всего подходят для «плоских» текстовых совпадений - вложенные данные подталкивают механизмы регулярных выражений в области, для которых они не предназначены. Для общего анализа HTML нужен синтаксический анализатор, а не механизм регулярных выражений (Google, чтобы узнать разницу между обычными и контекстно-свободными языками, если вам нужны полные технические детали).

Легко удалить все теги, заменив / </ и /> / пустой строкой или их эквивалентами сущностей, но выборочная фильтрация HTML с использованием регулярных выражений будет уязвима для широкого спектра случайных или злонамеренных вводов, нарушающих работу.

Ну вот:

{<(?!i|b|h[1-6]|/i|/b|/h[1-6][\s|>|/])[^>]*>}

strip_tags() делает это.

Здесь я включаю все теги <a><p><font><b><i><sup> и выводю аккуратную версию:

cat input.htm | tr -d '\n' | php -r '$input=fgets(STDIN); echo strip_tags($input,"<a><p><font><b><i><sup>");' | tidy -i -wrap 0 -o output.htm

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