Probleme mit Regex (XML Highlighting)

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Probleme mit Regex (XML Highlighting)

    Code:
    function xmlhighlight($code){
    	$code=preg_replace("/(\&lt\;([a-zA-Z0-9\/]+))([\s\r\n]*)/iu","<span style=\"color: blue; font-weight: bold;\">\\1</span>\\3",$code);
    	$code=preg_replace("/([\s\r\na-zA-Z0-9)]*)((\/|)\&gt\;)/iu","\\1<span style=\"color: blue; font-weight: bold;\">\\2</span>",$code);
    	$code=preg_replace("/(&lt;)([^<>&gt;&lt;]+)([\s\r\n]+)([a-zA-Z0-9]+\=)([^<>&gt;&lt;]+)(&gt;)/isu","\\1\\2\\3<span style=\"color: green; text-weight: none;\">\\4</span>\\5\\6",$code);
    	$code=codehighlight($code);
    	return $code;
    }
    Diese Funktion sollte die XML Attribute und Elemente highlighten.
    Der dritte Teil funktioniert allerdings nicht.
    Bei den Codeeingaben wurde < und > schon durch &lt; und &gt; ersetzt. Wo liegt der Fehler?

  • #2
    Da: [^<>&gt;&lt;]
    &gt;/&lt; sine keine einsamen Zeichen; das musst du mit einer negativen Assertion lösen: (?<!(<|>|&gt;|&lt)
    mein Sport: mein Frühstück: meine Arbeit:

    Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

    Kommentar


    • #3
      Code:
      Warning: Compilation failed: lookbehind assertion is not fixed length at offset 26 in /kunden/solanki.ch/htdocs/cvs/functions.php on line 617
      Code:
      $code=preg_replace("/(&lt;)((?<!(<|>|&gt;|&lt;))+)([\s\r\n]+)([a-zA-Z0-9]+\=)((?<!(<|>|&gt;|&lt;))+)(&gt;)/isu","\\1\\2\\3\\4<span style=\"color: green; text-weight: none;\">\\5</span>\\6\\7\\8\\9",$code);
      Was nun?
      Btw. waer die negative Assertion nicht ?! statt ?<! (Jedenfalls laut PHP Manual)

      Kommentar


      • #4
        Lookbehind assertions start with (?<= for positive assertions and (?<! for negative assertions.
        Vielleicht muss ja noch was escaped werden ... aber er kommt ja durch bis zur ersten schließenden Klammer.

        Ich würd vorschlagen, du stellst das Ding erstmal alleine in einen Ausdruck und probierst rum, bis es funktioniert.

        Und poste bitte die Lösung, wenn du sie hast.
        mein Sport: mein Frühstück: meine Arbeit:

        Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

        Kommentar


        • #5
          Moin,

          ([^<>&gt;&lt;]+)

          Das bedeutet das kein ; kein & kein l etc. im Text enthalten sein darf, bzw. bricht er ab wenn eins der Zeichen im Text ist. Denke nicht das du das möchtest!?

          Warum ersetzt du alle < durch die HTML Tags? Ohne wärs einfacher.

          [\s\r\n]

          Da sollte \s reichen. \s enthält alle Whitespaces, auch \n \r ...

          ... vielleicht reicht dir diese Info bereits?
          Grüsse,
          Sebastian


          Profil Flex Freelancer
          Twitter twitter.com/flashhilfe
          Web Flash und Flex Community

          Kommentar


          • #6
            @Sebastian: Wieso ich entities benutze?
            Weil ich den span tag mit den < und > benutze und es mir so die Formatierung zerstört. Z.B:

            Code:
            <span <span style="color:green;">style=</span>"color:blue; font-weight:bold;">
            Bis jetzt habi noch keine brauchbare Lösung...

            Kommentar


            • #7
              Hm ok.

              Poste bitte mal ein komplettes Beispiel für den letzten Ausdruck. Dann teste ich mal etwas
              Grüsse,
              Sebastian


              Profil Flex Freelancer
              Twitter twitter.com/flashhilfe
              Web Flash und Flex Community

              Kommentar

              Lädt...
              X