2010-12-21 12 views
2

Die folgende Ausgabe wird von einem Drittanbieter-Tool generiert, das XML-Dateien anhand eines XML-Schemas validiert. Es wird Validierungsfehler ausgeben. Ok, das war nur ein kleiner Zusammenhang.Verwenden Sie Perl zum Bearbeiten von HTML-Dateien

Aus den oben genannten Fehlern in HTML angezeigt werden, möchte ich "Syntax Highlighting" mit Perl durchführen können. Zum Beispiel möchte ich bestimmte Teile des obigen Textes hervorheben können.

Speziell, ich möchte jeden Text, der "Linie [0-9] *" entspricht, als fett und in rot färben. Ich habe versucht, mit Regex-Suche zu experimentieren und zu ersetzen, aber ich war nicht so erfolgreich.

Alle Hinweise/Hinweise wären fantastisch.

Vielen Dank!

Line 8: Element 'alphabet', attribute 'letters': The value 'XYZ' does not match the fixed value constraint 'ABC'. 
Line 185: Element 'drink': The attribute 'coffee' is required but missing. 
Line 254: Element 'timeout': This element is not expected. 
Line 269: Element 'commands': This element is not expected. Expected is one of (eat, drink, sleep). 
Line 812: Element 'software': The attribute 'version' is required but missing. 
Line 876: Element 'windows-software': The attribute 'version' is required but missing. 
Line 890: Element 'contact': The attribute 'telephone' is required but missing. 
Line 890: Element 'operating': The attribute 'mode' is required but missing. 
+1

Sie sollten wahrscheinlich die Regex zeigen, und einige der HTML-Code Sie –

+0

Der Text über hervorzuheben ist, was in einer HTML-Datei angezeigt wird. Das ist, was ich auf – sandster

+0

Hervorhebung durchführen möchten Sie erkennen, dass dort kein HTML ist, richtig? Befindet sich der Text in einem Pre-Block? –

Antwort

1

Haben Sie einen Versuch mit diesem:

#!/usr/bin/perl 
use strict; 
use warnings; 

while(<DATA>) { 
    s#(Line \d+)#<span style="font-weight:bold;color:red;">$1</span>#; 
    s#(Element\s|attribute\s)('[^']*')#$1<span style="font-weight:bold;color:blue;">$2</span>#g; 
    print 
} 

__DATA__ 
Line 8: Element 'alphabet', attribute 'letters': The value 'XYZ' does not match the fixed value constraint 'ABC'. 
Line 185: Element 'drink': The attribute 'coffee' is required but missing. 
Line 254: Element 'timeout': This element is not expected. 

Ausgang

<span style="font-weight:bold;color:red;">Line 8</span>: Element <span style="font-weight:bold;color:blue;">'alphabet'</span>, attribute <span style="font-weight:bold;color:blue;">'letters'</span>: The value 'XYZ' does not match the fixed value constraint 'ABC'. 
<span style="font-weight:bold;color:red;">Line 185</span>: Element <span style="font-weight:bold;color:blue;">'drink'</span>: The attribute <span style="font-weight:bold;color:blue;">'coffee'</span> is required but missing. 
<span style="font-weight:bold;color:red;">Line 254</span>: Element <span style="font-weight:bold;color:blue;">'timeout'</span>: This element is not expected. 

Statt Stil Ausprägungs Sie eine CSS-Klasse verwenden können.

s#(Line \d+)#<span class="bold_red">$1</span>#; 
+0

So habe ich versucht, markieren Sie den Text nach dem Wort "Element", aber es scheint zu hoch mehr als ich brauche. Ich möchte das Wort sofort nach "Element" und "Attribut" hervorheben können. Der folgende Befehl scheint "Element: 'aplhabet' zu erhöhen, während ich nur 'alphabet' hervorgehoben haben möchte. $ output = ~ s # (Element (\ s) ['] (\ w) * (-) * (\ w) * [']) # $ 1 #g; – sandster

+0

@sandster: ich habe meine antwort bearbeitet – Toto

Verwandte Themen