000
14.02.2007, 18:41 Uhr
tobias
hmm....
|
So nach Krankheit endlich wieder mal am pc..
so ich hab mal eben diesen highlighter für php code geschrieben, bzw. bin dabei.
Bevor ich den Code reinposte erstmal die frage:
Ich brauche ein Regex, dass mir erlaubt in einem text etwas zu ersetzen, jedoch darf es nur innerhalb oder außerhalb eines:
<span style="colo... >also hier </span> stehen..
mein regex sah so aus:
PHP 4: |
$h_php = preg_replace('/(\<span (.*?)\>)' . $tok . '(\<\/span\>)/is', '<span>' . $tok . '</span>', $h_php);
|
Hoffe mir kann da einer helfen.. Ihr dürft auch gerne an meinem Script testen, dann findet ihr mein problem evtl. ein wenig schneller..
edit: vergesst es, der highlighter hier, hat mein ganzen code irgendwie verändert sodass ihr ihn nicht benutzen könnt, aber im groben einmal schauen könnt.
Code: |
<?php
function highlight_php($code) { $h_php = $code; $script = $code; $tokens = token_get_all($script); foreach($tokens as $token) { if (!is_array($token)) { // // auf alles andere prüfen // } else { list($id, $tok) = $token; switch(token_name($id)) { case 'T_ABSTRACT' : case 'T_ARRAY' : case 'T_ARRAY_CAST' : case 'T_AS' : case 'T_BOOL_CAST' : case 'T_BREAK' : case 'T_CASE' : case 'T_CATCH' : case 'T_CLASS' : case 'T_CONST' : case 'T_CONTINUE' : case 'T_DECLARE' : case 'T_DEFAULT' : case 'T_DO' : case 'T_DOUBLE_CAST' : case 'T_ECHO' : case 'T_ELSE' : case 'T_ELSEIF' : case 'T_EMPTY' : case 'T_ENDDECLARE' : case 'T_ENDFOR' : case 'T_ENDFOREACH' : case 'T_ENDIF' : case 'T_ENDSWITCH' : case 'T_ENDWHILE' : case 'T_EVAL' : case 'T_EXIT' : case 'T_EXTENDS' : case 'T_FINAL' : case 'T_FOR' : case 'T_FOREACH' : case 'T_FUNCTION' : case 'T_GLOBAL' : case 'T_IF' : case 'T_HALT_COMPILER' : case 'T_IMPLEMENTS' : case 'T_INCLUDE' : case 'T_INCLUDE_ONCE' : case 'T_INSTANCEOF' : case 'T_INT_CAST' : case 'T_INTERFACE' : case 'T_ISSET' : case 'T_LIST' : $h_php = str_replace($tok, '<b>' . $tok . '</b>', $h_php); break; case 'T_AND_EQUAL' : case 'T_CONCAT_EQUAL' : case 'T_DEC' : case 'T_DIV_EQUAL' : case 'T_INC' : $h_php = str_replace($tok, '<span style="color:#000080;">' . $tok . '</span>', $h_php); break; case 'T_BOOLEAN_AND' : case 'T_BOOLEAN_OR' : case 'T_DOUBLE_ARROW' : case 'T_IS_EQUAL' : case 'T_IS_GREATER_OR_EQUAL' : case 'T_IS_IDENTICAL' : case 'T_IS_NOT_EQUAL' : case 'T_IS_NOT_IDENTICAL' : case 'T_IS_SMALLER_OR_EQUAL' : $h_php = str_replace($tok, '<span style="color:#ff0000;">' . $tok . '</span>', $h_php); break; case 'T_CONSTANT_ENCAPSED_STRING' : $h_php = str_replace($tok, '<span style="color:#0000ff;">' . $tok . '</span>', $h_php); break; case 'T_DNUMBER' : case 'T_LNUMBER' : $h_php = str_replace($tok, '<span style="color:#008000;">' . $tok . '</span>', $h_php); break; case 'T_DOUBLE_COLON' : $h_php = str_replace($tok, '<span style="color:#ff0000;"><b>' . $tok . '</b></span>', $h_php); break; case 'T_FILE' : case 'T_LINE' : $h_php = str_replace($tok, '<span style="color:#800080;"><b>' . $tok . '</b></span>', $h_php); break; } } } $h_php = str_replace('<?', '<?', $h_php); return $h_php; } $text = "<?php // // testkommentar // /* noamal */ interface (int) __LINE__ &&||.=--||&&/======
foreach(\$tokens as \$token)
foreach (\$i = 0; \$i < \$elements; \$i++)
if ('lol' == 'lal') { } list isset
abstract &= function(\$test) { \$code = \$test; echo \$code; }
\$variable = array(\"testtext\" => 0);
?>";
echo "<span style=\"font-family:'Courier New';font-size:10pt;\">" . nl2br(highlight_php($text)) . "</span>";
?>
|
-- Danke Dieser Post wurde am 15.02.2007 um 10:17 Uhr von FloSoft editiert. |