Ist "" (U + 003E GREATER-THAN SIGN) innerhalb eines html-element Attributwertes erlaubt?

8

Mit anderen Worten, kann man /<tag[^>]*>.*?<\/tag>/ regex verwenden, um das tag html Element zu finden, das keine verschachtelten tag Elemente enthält?

Zum Beispiel (lt.html):

%Vor%

Regex:

%Vor%

Und Bildschirm-Schaber:

%Vor%

Beide geben die gleiche Ausgabe:

%Vor%

Erwartete Ausgabe:

%Vor%

w3c sagt:

  

Attributwerte sind eine Mischung aus Text   und Zeichenreferenzen, außer mit   die zusätzliche Einschränkung, dass die   Text kann keine mehrdeutigen enthalten   kaufmännisches Und.

    
jfs 18.09.2008, 17:08
quelle

7 Antworten

8

Ja, es ist erlaubt (W3C Validator akzeptiert es, gibt nur eine Warnung aus).

Unescaped < und > sind auch innerhalb von Kommentaren erlaubt, also kann so einfach regexp getäuscht werden.

Wenn BeautifulSoup dies nicht handhabt, könnte es sich um einen Fehler oder eine bewusste Designentscheidung handeln, um die fehlenden Anführungszeichen in Attributen widerstandsfähiger zu machen.

    
Kornel 19.10.2008, 23:10
quelle
3

Ich glaube, das ist gültig, und der W3C-Validierer stimmt zu, aber die maßgebliche Quelle für diese Information ist der Standard ISO 8879: 1986, der ~ 150EUR / 210USD kostet. Trotzdem ist es nicht falsch, sie zu kodieren, also im Zweifelsfall kodieren. Wenn Sie einen XML-basierten Dokumenttyp verwenden, müssen Sie außerdem Größer-als-Zeichen in der Sequenz ]]> codieren.

    
Jim 18.09.2008 17:14
quelle
3

Literal > ist überall im HTML-Inhalt zulässig, sowohl innerhalb von Attributwerten als auch als Text in einem Element.

    
kch 18.09.2008 17:33
quelle
2

Nach dem Lesen der folgenden:

Ссылка

Es sieht so aus, als würden Entity-Escapes überall (einschließlich in Attributen) für & lt; & gt; und & amp;

    
bmdhacks 18.09.2008 17:12
quelle
2

Wenn Sie darauf bestehen, reguläre Ausdrücke zu verwenden (was für grundlegende String-Operationen geeignet ist), versuchen Sie es mit <tag((\s+\w+(\s*=\s*(?:".*?"|'.*?'|[^'">\s]+))?)+\s*|\s*)>.*?<\/tag> . Es sollte die Attribute perfekt anpassen und Ihnen somit den Zugriff auf den inneren Inhalt ermöglichen (obwohl Sie ihn in eine Erfassungsgruppe einfügen müssen).

Sie können auch die Html Agility Pack zum Analysieren von HTML verwenden, die ich würde empfehlen, wenn Sie viel Parsing tun werden. Das Aufrechterhalten großer regulärer Ausdrücke kann leicht zu Kopfschmerzen werden, aber in der Zwischenzeit sind sie auch viel effektiver, wenn Sie dazu in der Lage sind.

    
Troels Thomsen 25.09.2008 02:13
quelle
0
%Vor%

Passt nicht zu einem einzelnen Tag, sondern passt das erste Start-Tag und das letzte End-Tag für ein bestimmtes Tag an. Genau wie dein erstes nicht gieriges Tag-Match, sollte dein In-Between auch nicht-gierig geschrieben werden.

    
quelle
0

sehen Sie, ob Sie das gleiche Ergebnis mit & amp; gt; anstelle von & gt;

    
Steven A. Lowe 18.09.2008 17:11
quelle

Tags und Links