Bande toutes les balises HTML, à l'exception des liens

voix
26

Je suis en train d'écrire une expression régulière pour dépouiller tous les fichiers HTML à l'exception des liens (les <a hrefet </a>balises respectivement. Il ne doit pas être sûr à 100% (je ne suis pas inquiet au sujet des attaques par injection ou quoi que ce soit que je suis content d' analyse syntaxique qui a déjà été approuvé et publié dans un SWF film).

Les « balises strip » originale expression régulière que je utilise était <(.|\n)+?>, et j'ai essayé de le modifier pour <([^a]|\n)+?>, mais bien sûr , permettra une étiquette qui a un un dans plutôt que celui qu'il a au début, avec un espace.

Non pas que cela devrait vraiment, mais au cas où quelqu'un se soucie de savoir que je suis en train d' écrire ceci dans ActionScript 3.0 pour un flash film.

Créé 04/09/2008 à 17:04
source utilisateur
Dans d'autres langues...                            


6 réponses

voix
-1

Que diriez-vous

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

?

Créé 04/09/2008 à 17:09
source utilisateur

voix
26

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

Essaye ça. Avait quelque chose de similaire pour les balises p. A travaillé pour eux alors ne vois pas pourquoi pas. Utilise négatif pour vérifier préanalyse qu'il ne correspond pas à une (préfixé avec option / caractère) où (à l'aide avant positive) un (avec option / préfixe) est suivi d'un> ou un espace, des trucs et>. Cela correspond alors jusqu'à la prochaine> caractère. Mettez cela dans un Subst avec

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

Cela devrait laisser que l'ouverture et la fermeture d'une des balises

Créé 04/09/2008 à 17:29
source utilisateur

voix
1

Je continue sur ce sujet, mais il n'y a aucun moyen que je peux recommander RegExr trop souvent. Il est fantastique pour tester ce type de choses.

Créé 05/09/2008 à 13:41
source utilisateur

voix
1

En général, il y a des problèmes avec cette approche. Regexes sont les meilleurs pour les matches de texte « plates » - données imbriquées pousse les moteurs de regex dans les zones pour lesquelles ils ne sont pas conçus. analyse syntaxique HTML générale a besoin d'un analyseur pas un moteur regex (Google pour la différence entre les langues régulières et sans contexte si vous voulez tous les détails techniques).

Il est facile de dépouiller tous les tags en remplaçant / </ et /> / avec la chaîne vide ou leurs équivalents entité mais filtrer sélectivement HTML en utilisant des expressions rationnelles sera vulnérable à un large éventail d'entrées accidentelles ou malveillantes rupture des choses.

Créé 22/09/2008 à 12:36
source utilisateur

voix
0

Voici:

{<(?!i|b|h[1-6]|/i|/b|/h[1-6][\s|>|/])[^>]*>}
Créé 28/12/2009 à 09:06
source utilisateur

voix
-2

strip_tags() est ce que ca.

Ici, je suis , y compris toutes les <a><p><font><b><i><sup>balises et sortir une version tondu:

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
Créé 13/05/2014 à 21:02
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more