Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » PHP » suche regexp

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
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&uuml;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('<?', '&lt;?', $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.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ PHP ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: