Frage

Ich versuche, einen regulären Ausdruck zu schreiben, um den gesamten HTML-Code mit Ausnahme der Links (die <a href Und </a> Tags bzw.Es muss nicht 100 % sicher sein (ich mache mir keine Sorgen über Injektionsangriffe oder ähnliches, da ich Inhalte analysiere, die bereits genehmigt und in einem veröffentlicht wurden SWF Film).

Der ursprüngliche reguläre Ausdruck „Strip-Tags“, den ich verwende, war <(.|\n)+?>, und ich habe versucht, es zu ändern <([^a]|\n)+?>, aber das erlaubt natürlich jedes Tag, das ein hat A darin und nicht einer, der es am Anfang hat, mit einem Leerzeichen.

Nicht, dass es wirklich wichtig sein sollte, aber falls es jemand wissen möchte, schreibe ich das hier ActionScript 3.0 Für ein Blitz Film.

War es hilfreich?

Lösung

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

Versuche dies.Hatte etwas Ähnliches für p-Tags.Hat für sie funktioniert, also verstehe ich nicht, warum nicht.Verwendet einen negativen Lookahead, um zu überprüfen, ob er nicht mit einem (mit einem optionalen /-Zeichen als Präfix) übereinstimmt, wobei (mit einem positiven Lookahead) auf a (mit optionalem /-Präfix) ein > oder ein Leerzeichen, stuff und dann > folgt.Dies stimmt dann bis zum nächsten >-Zeichen überein.Fügen Sie dies in einen Subst mit ein

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

Es sollten nur die öffnenden und schließenden a-Tags übrig bleiben

Andere Tipps

Ich rede immer wieder davon, aber ich kann es auf keinen Fall weiterempfehlen regexr zu oft.Es ist fantastisch, um solche Dinge zu testen.

Im Allgemeinen gibt es bei diesem Ansatz Probleme.Regexe eignen sich am besten für „flache“ Textübereinstimmungen – verschachtelte Daten drängen Regex-Engines in Bereiche, für die sie nicht ausgelegt sind.Für die allgemeine HTML-Analyse ist ein Parser und keine Regex-Engine erforderlich (Google für den Unterschied zwischen regulären und kontextfreien Sprachen, wenn Sie die vollständigen technischen Details wünschen).

Es ist einfach, alle Tags zu entfernen, indem man /</ und />/ durch die leere Zeichenfolge oder ihre Entitätsäquivalente ersetzt, aber das selektive Filtern von HTML mithilfe von regulären Ausdrücken ist anfällig für eine Vielzahl versehentlicher oder böswilliger Eingaben, die zu Störungen führen.

Bitte schön:

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

Wie wäre es mit

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

?

strip_tags() macht dies.

Hier beziehe ich alle mit ein <a><p><font><b><i><sup> Tags und Ausgabe einer aufgeräumten Version:

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top