Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

При этом должны остаться только открывающие и закрывающие теги

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

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

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

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

Держи, пожалуйста:

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

Как насчет

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

?

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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top