mit preg_split code zerlegen
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
attribut
ausdruck
befehlen
beitrag
bereich
board
erkennung
extra
farbe
fragment
hilfe
hochladen
listen
manual
praktischen ausdruck
sache
source
syntax
tag
-
Hihoha,
wie wohl jedem bekannt ist, kann man mit preg_split einen String zerlegen.
Es gibt einen sehr praktischen tag/ausdruck">Ausdruck, der einen HTML-Code zerlegen kann: /(<(?:[^<>]+(?:"[^"]*"|\'[^\']*\')?)+>)/
Dieser Ausdruck erkennt auch, dass z.B. ein > in einem String in einem Tag ist, ohne dass dann dort der Tag beendet wird:
$code = '<html><body class="bla>bla"></body></html>'; $tokens = preg_split('/(<(?:[^<>]+(?:"[^"]*"|\'[^\']*\')?)+>)/',$code,-1,PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); print_r($code); /* Zeigt etwas an wie array( 0 => <html> 1 => <body class="bla>bla"> 2 => </body> 3 => </html> ) */
Das Problem: damit kann man nicht einen Code nach PHP zerlegen. Es k?nnte ja sein, dass ein >= im Code steht, und dadurch wird der Tag beendet.
Ich wollte jetzt wissen, wie man einen Ausdruck schreiben k?nnte, der auch PHP ber?cksichtigt.
Ich habe es schon versucht mit /(<\?(?:[^<>]+(?:"[^"]*"|\'[^\']*\')?)+\?>)/, aber das funktioniert nicht.
Der Zweck der ganzen Sache ist Syntaxhighlighting.
K?nnte mir jemand evntl. weiterhelfen?
W?re nett.
mfg,
hr -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Erstmal: Sch?ner RegEx! Irgendwo im SELFFORUM hab ich vor einiger Zeit mal einen gesehen, der HTML-Tags korrekt filterte, eben auch mit dem > in den Attribut-Werten. Ich hab ihn nur nie wieder gefunden.
W?rdest du das Teil mal bei meiner Source-Code-Liste hochladen? So wie es aussieht, hat das Lima-Board einige Backslashes zu viel eingebaut. Oder kommt mir das nur so vor?
http://alopex.pyrokar.lima-city.de/srccodelist/
Zu deinem Problem f?llt mir nicht viel ein, was mit regul?ren Ausdr?cken oder preg_split() zu tun hat. Ich benutze die Tokenizer-Befehle, um PHP-Code von Quelltexten zu trennen. Das Gleich kannst du auch mit den HTML-Bereichen (statt der Quelltexte) machen
http://de.php.net/manual/de/ref.tokenizer.php
Das d?rfte wesentlich sicherer in der Erkennung sein, als regul?re Ausdr?cke. Die HTML-Bereiche kannst du ja dann extra mit regul?ren Ausdr?cken bearbeiten, wenn du die auch bunt machen willst. PHP selbst stellt ja die HTML-Bereiche beim Syntax-Highlighting in nur einer Farbe dar. -
Hi,
ich hab den Code als preg_split_code.php bei dir hochgeladen, aber ich glaube, dass keine zus?tzliche Backslashes eingebaut wurden, die waren schon ok, aber ist ja egal.
Den PHP Code zu zerlegen w?re schon sehr schwierig, aber ich denke, dass es m?glich w?re. Was ich aber zuerst noch brauche ist einen regex, der nicht nur die HTML-Tags ausliest, sondern auch die PHP-Tags, da /(<(?:[^<>]+(?:"[^"]*"|\'[^\']*\')?)+>)/ ja nur nach < sucht und nicht nach <?.
K?nntest du mir evntl. helfen diesen Ausdruck zu schreiben?
Es k?nnte ja so irgendwie funktionieren, beim Unterschtrichenen weiss ich nicht wie: /(<\?(?:[^<>]+(?:"[^"]*"|\'[^\']*\')?)+\?>)/
Muss man das Fragment [^<>] so schreiben?: [^(<\?|\?>)].
Danke schonmal f?r die Hilfe.
mfg,
hr
Beitrag ge?ndert am 7.02.2006 20:25 von heavyraptor -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage