kostenloser Webspace werbefrei: lima-city


regex für inhalt zwischen kommentaren

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    raubritta

    Kostenloser Webspace von raubritta

    raubritta hat kostenlosen Webspace.

    Hallo,

    ich bin gerade sehr am Verzweifeln mit dem verdammten regex... es will einfach nicht so, wie ich:


    ich lese eine cssdatei aus. In der steht etwas, wie:
    text
    /* ressource */
    .ressource {
    margin-top:5px;
    }
    /* /ressource */
    weiterer text

    nun möchte ich diesen inneren Text ersetzen mit meinem eigenen Text
    $somecontent = preg_replace("#(\/\* ressource \*\/)(.*?)|smU(\/\* \/ressource \*\/)#", "/* ressource */".$css_text."/* /ressource */", $contents, -1 , $count);

    bei $somecontent habe ich nun aber noch den alten text + /* /ressource */ stehen und ich weiß nicht warum / wie ich es behoben bekomme. Hat jemand eine Idee?
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    raubritta schrieb:
    css:
    text 
    /* ressource */
    .ressource {
    margin-top:5px;
    }
    /* /ressource */
    weiterer text

    nun möchte ich diesen inneren Text ersetzen mit meinem eigenen Text
    Und dort möchtest du die Kommentare durch was anderes ersetzen? Durch was magst du das ersetzen? Ich verstehe irgendwie nicht ganz was du willst.
    Was soll am Ende herauskommen?

    Was meinst du mit "inneren Text"?
  4. du gehst völlig falsch an die sache ran... wenn du die CSS file mit fopen öffnest, machst du dir erstmal ein file-handle, wo du ein array herbekommst, was zeile für zeile deine CSS abarbeitet. das heißt du brauchst kein replace setzen, sondern du baust dir ne schleife. außerhalb der schleife initialisierst du ein flag und ein leeres array. dann machst du ein preg_match auf dein /*ressource*/ um das flag auf 1 zu setzen, und eine ifelse, die den Code verwirft, der überschrieben werden soll und über pregmatch auf /* /ressource */ setzt du das flag zurück um die verarbeitung weiter zu machen.

    mehr zeit hab ich leider nciht, sonst hätte ich beispielcode geliefert, aber sollte heute abend keiner es gepackt haben dein problem zu lösen, setz ich mich ran... ist eigentlich ganz einfach
  5. Autor dieses Themas

    raubritta

    Kostenloser Webspace von raubritta

    raubritta hat kostenlosen Webspace.

    @hackyourlife: ich möchte dynamisch csssprites erstellen. Das mit dem zusammenfassen der grafiken passt wunderbar und auch die cssfile würde einzeln passen. Ich möchte aber keine 5 cssdateien includen sondern nur eine. Aus diesem grund habe ich meine Datei in mehrere Bereiche eingeteilt und möchte in einem dieser Bereiche den text ersetzen.

    @sebulon. Danke. Deine Idee gefällt mir schonmal recht gut. Ich muss mal schauen, wie ich das als array bekomme...
    was genau willst du mit deiner ifelse machen? das habe ich noch nicht so richtig verstanden.
    Ich versuche mal mein glück mit deiner Idee :)

  6. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    raubritta schrieb:
    @hackyourlife: ich möchte dynamisch csssprites erstellen. Das mit dem zusammenfassen der grafiken passt wunderbar und auch die cssfile würde einzeln passen. Ich möchte aber keine 5 cssdateien includen sondern nur eine. Aus diesem grund habe ich meine Datei in mehrere Bereiche eingeteilt und möchte in einem dieser Bereiche den text ersetzen.
    Dann nimm doch einfach das hier:
    $css = <<<'EOF'
    text 
    /* ressource */
    .ressource {
    margin-top:5px;
    }
    /* /ressource */
    weiterer text
    EOF;
    
    $name = 'ressource'; // section name
    $cssnew = 'margin-top:10px;'; // new css text for section
    
    $regex = "|(/\* $name \*/).*?(/\* /$name \*/)|is";
    $replace = "$1\n$cssnew\n$2";
    
    $result = preg_replace($regex, $replace, $css);
    
    echo($result); // new css text
  7. Autor dieses Themas

    raubritta

    Kostenloser Webspace von raubritta

    raubritta hat kostenlosen Webspace.

    vielen vielen dank!

    es klappt wunderbar :)

    nur eine Frage hätte ich noch: wieso muss das / vor ressource nicht gecastet werden?
  8. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    raubritta schrieb:
    wieso muss das / vor ressource nicht gecastet werden?
    Weil ich das regex mit
    |
    begrenze...

    Wenn du zur Begrenzung
    /
    verwendest musst du das jedes mal im Regex selbst escapen, was unnötiger Aufwand ist.

    Dabei fällt mir gerade auf, dass es so aussehen müsste:
    $regex = "|(/\\* $name \\*/).*?(/\\* /$name \\*/)|is";
    Die
    \
    müssen im String ja auch escaped werden.
  9. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!