2012-04-03 10 views
0

Szenario folgende:Filter XML/HTML-Code-Tags mit RegEx

Bei einem XML-ähnlichen Dokument:

<Root> 
<NotNeededTag style="color: #ABCDEF">With needed Text</NotNeededTag> 
Text here <Break/> 
<Bold> with bolded text </Bold> 
Next text <Italic> It's a kind <Bold> OF </Bold> M A G I C 
</Root> 

Mein Ziel ist es, alle Tags zu filtern, die nicht fett sind, Kursiv Pause und, aber der Text in den nicht benötigte-Tags sollte beibehalten werden:

With needed Text 
Text here <Break/> 
<Bold> with bolded text </Bold> 
Next text <Italic> It's a kind <Bold> OF </Bold> M A G I C 

Ist das möglich, es mit regelmäßigen Expres zu realisieren sionen?

freundlichen Grüßen sb

+0

Schlechte Idee, und Exact Duplikat. Siehe http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags – brice

+1

Nein, nur eine schlechte Frage. Er will es nicht analysieren, aber Tags filtern. – Bergi

Antwort

0

Script:

#!/usr/bin/perl 

use strict; 
use warnings; 

$/ = undef; 
$_ = <main::DATA>; 

s/<\/?(?:(?!bold|italic|break).)*?\/?>//ig; 

print $_; 

__DATA__ 
<Root> 
<NotNeededTag style="color: #ABCDEF">With needed Text</NotNeededTag> 
Text here <Break/> 
<Bold> with bolded text </Bold> 
Next text <Italic> It's a kind <Bold> OF </Bold> M A G I C 

Ausgang:

With needed Text 
Text here <Break/> 
<Bold> with bolded text </Bold> 
Next text <Italic> It's a kind <Bold> OF </Bold> M A G I C 
2

Sie können keine HTML parsen mit regexps und Sie sollten es auch nicht für XML tun.

Aber mit einem gültigen XML-Dokument, können Sie Regexes verwenden, um Tags zu ersetzen. Gültig bedeutet hier, dass < und> geflüchtet sind, wenn sie nicht zu einem Tag gehören. Dann sollte es möglich sein, alles zu löschen, die

Spiele
/<\/?(?!(Bold|Italic|Break)\s*\/?>)[^\s]+?>/ 

ich mit Perl nicht vertraut bin, aber ich bin sicher, dass Sie diese Regex anpassen können.

+2

Eigentlich muss '>' nicht maskiert werden, damit das XML wohlgeformt ist. Siehe http://www.w3.org/TR/REC-xml/#syntax: * "Die rechte spitze Klammer (>) kann mit der Zeichenfolge" > "dargestellt werden und MUSS aus Kompatibilitätsgründen entweder mit" > "oder eine Zeichenreferenz, wenn sie in der Zeichenkette"]]> "im Inhalt erscheint, wenn diese Zeichenkette nicht das Ende eines CDATA-Abschnitts markiert." * Dies kann sein oder nicht pingelig: ' 'ist zum Beispiel gut gebildet. – mirod

+0

OK, dann wird es schwieriger, die Tags zu finden. – Bergi