CSS und JS Files Minifizieren Reguläre Ausdrücke

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • CSS und JS Files Minifizieren Reguläre Ausdrücke

    Hallo,

    ich weiß nicht ob ich und die Regexes noch gute Freunde werden :-).

    Ich habe ein Problem aus einem CSS File alle WhiteSpaces zu entfernen die von bestimmten Zeichen gefolgt sind.

    Hier mein Regex
    PHP-Code:
    $pattern "~\s+(\(|\)|\[|\]|\{|\}|\:|\;)~"
    Mir werden nur schließende } entfernt. Ich will aber nur die Leerzeichen weg haben und nicht die Zeichen. Die Zeichen in dem Unterausdruck sollen nur als Bedingung gelten für das entfernen von Whitespaces.

    Kann mir eventuell jemand helfen? Vielen Dank der Litter
    Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
    http://www.lit-web.de

  • #2
    Stichwort Assertion.

    - PHP: Assertions - Manual

    Code:
    \s+(?=[()[\]{}:;])

    Kommentar


    • #3
      Das funktioniert nicht.

      Mal meine CSS

      Code:
      /* gültig fü alles */
      *{ 
      	margin:0px; 
      	padding:0px; 
      	outline:none; 
      } 
      
      /* formatierung hauptcontainer */
      div#application { 
      	width: 1000px; 
      	height: 500px; 
      	border: 1px solid #000; 
      } 
      
      /*
      *
      *	ein großer block kommentar
      *	*sdfsdfs*
      *
      */
      div#navi { 
      	width: 200px; 
      	border: 1px solid #000; 
      	margin: 5px 5px 5px 5px; 
      }
      So Blockkommentare habe ich filtern können, \n oder \r und \t auch.

      Aber das mit den Leerzeichen leider noch nicht.

      PHP-Code:
      $str preg_replace("~\s+(?=[()[\]{}:;])~"''$str);
      echo 
      $str
      Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
      http://www.lit-web.de

      Kommentar


      • #4
        Wie definierst du denn „funktioniert“?

        Der Ausdruck betrifft in deinem Beispiel nun mal lediglich acht Stellen.

        PHP-Code:
        <?php

        $str 
        = <<<EOT
        /* gültig fü alles */
        *{ 
            margin:0px; 
            padding:0px; 
            outline:none; 


        /* formatierung hauptcontainer */
        div#application { 
            width: 1000px; 
            height: 500px; 
            border: 1px solid #000; 


        /*
        *
        *    ein großer block kommentar
        *    *sdfsdfs*
        *
        */
        div#navi { 
            width: 200px; 
            border: 1px solid #000; 
            margin: 5px 5px 5px 5px; 
        }
        EOT;

        $minified preg_replace("~\s+(?=[()[\]{}:;])~"''$str);

        echo 
        "Minified output:\n\n";

        echo 
        $minified;

        echo 
        "\n\n";



        $originalSize strlen($str);
        $minifiedSize strlen($minified);

        echo 
        'Original size    : '$originalSize" B\n";
        echo 
        'Minified length  : '$minifiedSize" B\n";
        echo 
        'Compression rate : 'round(100 - ($minifiedSize $originalSize) * 100), " %\n";

        Kommentar


        • #5
          Na er greift nur bei den } Klammern im CSS.

          Es sollen aber die Whitespaces hinter jedem : ; { ( [ verschwinden und vor jedem } ) ].

          Regexes sind leider nicht meine wesentliche Stärke.
          Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
          http://www.lit-web.de

          Kommentar


          • #6
            Na dann formulier das in der Frage bitte auch so.

            Code:
            (?<=[)\]};])\s+|\s+(?=[([{])
            Heißt: „Leerzeichen, vor denen )]}; steht“ oder „Leerzeichen, hinter denen ([{ steht“

            Kommentar


            • #7
              Das funktioniert super, hab vielen Dank.
              Das sieht so einfach aus, aber für mich sind diese Regexes teilweise ne riesen Hürde.

              EDIT:
              Beim genaueren hinsehen fiel mir auf das doch nicht alles entfernt wurde was weg musste und so habe ich das noch so erweitert.

              PHP-Code:
              $str preg_replace("~(?<=[)\]}{;:])\s+|\s+(?=[([{}])~"''$str); 
              Und nun ist wirklich alles weg was weg muss um das CSS nur auf relevanten Code zu reduzieren.
              Zuletzt geändert von litterauspirna; 24.10.2011, 18:51.
              Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
              http://www.lit-web.de

              Kommentar

              Lädt...
              X