Seite 1 von 1

regex prof gesucht

Verfasst: 06.02.2007 21:49
von Ambience
Nabend,

ich will, dass

Code: Alles auswählen

"// testkommentar"
nicht ersetzt wird...

Code: Alles auswählen

// testkommentat
soll aber ersetzt werden..

Mein code funktioniert aber leider nicht:

Code: Alles auswählen

$text = preg_replace('/(^\"|\')(\/\/)(^\"|\')/is', 'k', $text);
edit:

und warum ergibt:


Danke

Code: Alles auswählen

$line_rows[$i] = preg_replace('/(\/\/)(.*?)/is', ".", $line_rows[$i]);
das da:
.
. Testkommentar
.
statt:
.
. ................
.

Verfasst: 06.02.2007 23:12
von Pyramide
Zu 1: Versuchs mal mit http://de.php.net/manual/de/ref.tokenizer.php

Zu 2: Na weil du das so angegeben hast: Zwei / und dann so wenig Zeichen wie möglich. Und "so wenig Zeichen wie möglich" sind in dem Fall eben keine. Versuchs mal stattdessen mit "#(?<=\\/\\/).*$#"

Verfasst: 08.02.2007 17:40
von Ambience
hmm deine 2.te version funktioniert nicht..

da bekomm ich dann: //.//.//.

ich brauch wie gesagt, das er das // am anfang sucht und fals noch was hinter dem // steht, das auch mit berücksichtigen

edit: nochmal der code:

Code: Alles auswählen

<?php

function parse_php($text)
{
   
    $text = str_replace('<', '<', $text);
    $text = str_replace('>', '>', $text);
      
    $text = preg_replace('/(\&lt\;\?php|\&lt\;\?)/is', '<span style="color:#ff0000;font-weight:bold;">$1</span>', $text);
    $text = preg_replace('/(\?\&gt\;)/is', '<span style="color:#ff0000;font-weight:bold;">$1</span>', $text);
      
    $text = preg_replace('/(\/\/)(.*?)/is', '<span style="color:#c0c0c0;">$1</span>', $text);
        
    
    return  $text;
}

$text = "
<?php

\$test = 'lol'; 
//
//Testkommentar
//


?>";

echo nl2br(parse_php($text));

?>

Verfasst: 09.02.2007 15:24
von Ambience
*bump*

Verfasst: 09.02.2007 16:54
von Pyramide

Code: Alles auswählen

$string = '// blahfasel';

echo preg_replace('#(?<=\\/\\/).*$#', '...', $string);
Ausgabe: //...

Verfasst: 10.02.2007 12:07
von Ambience
das FUNKTIONIERT NICHT, wie oft noch? :roll:

Verfasst: 10.02.2007 18:41
von Pyramide
Komisch daß es bei mir funktioniert...dann musst du wohl weiter Experimentieren, bis du eine Lösung gefunden hast, die auch bei dir funktioniert. Wobei ich mir nicht wirklich vorstellen kann, wieso der exakte Code, der bei mir funktioniert, bei dir nicht funktionieren sollte - ausser vielleicht du nutzt noch PHP3.

Verfasst: 11.02.2007 12:28
von Ambience
ja bei dir funktionierts auch, weil du dir zu fein bist, einmal mein code anzugucken, denn dann würdest du rausfinden, das es nicht funktioniert.

Verfasst: 14.02.2007 15:31
von Ambience
kann mir denn keiner helfen?

Ich will alle kommentare ersetzten, welche nicht in " oder ' stehen...

z.b. soll:
//

und

//test

sowie

// test

oder

//
// test
//
ersetzt werden, aber nicht:
"//"

oder

'//'

oder

"// testtesxt"
Wäre sehr dankbar wenn endlich mal ne Lösung käme...

edit: und '#(?<=\\/\\/ funktioniert nur bei einzeiligen text wie:

// lala

aber nicht bei

//
// lala
//