Ankündigung

Einklappen
Keine Ankündigung bisher.

regulärer Ausdruck

Einklappen

Neue Werbung 2019

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

  • regulärer Ausdruck

    Hallo,
    ich habe eine Textdatei, die neben vielen anderen werten auch Hexadezimalfarbcodes enthält. Ich möchte mit Hilfe eines regulären Ausdrucks nun alle Hexcodes auslesen.
    In der Datei steht z.B.
    Code:
    <![CDATA[
        .fil1 {fill:#502A26;fill-rule:nonzero}
        .fil2 {fill:#54762C;fill-rule:nonzero}
        .fil0 {fill:#A5B30A;fill-rule:nonzero}
        .fil3 {fill:white;fill-rule:nonzero}
       ]]>

    Mein Ausdruck lautet
    PHP-Code:
    preg_match('/#([0-9]|[A-F]|[a-f]){6}/'$temp$tempColors); 
    in $temp ist die Datei eingelesen mit
    file_get_contents($path)

    Als Ergebnis (also in $tempColors) bekomme ich aber nur
    PHP-Code:
    Array\n(\n    [0] => #502A26\n    [1] => 6\n) 
    Was hab ich falsch gemacht?

  • #2
    preg_match_all() benutzen
    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

    Kommentar


    • #3
      PHP-Code:
      preg_match_all("~#([0-9a-f]){6}~i"$temp$tempColors);
      var_dump($tempColors[0]); 
      Und wenn du es als RGB umwandeln willst, hier noch was nützliches
      PHP-Code:
      foreach ($tempColors[0] as $hexcolor){
          
      sscanf($hexcolor'#%2x%2x%2x'$r$g$b);
          echo 
      "RGB " $r ", " $g ", " $b "<br>\n";

      Kommentar


      • #4
        Zitat von lstegelitz Beitrag anzeigen
        preg_match_all() benutzen
        da kommt dann Array\n(\n [0] => Array\n (\n [0] => #A5B30A\n [1] => #54762C\n [2] => #7E4E38\n [3] => #CD142C\n [4] => #99202E\n )\n\n [1] => Array\n (\n [0] => A\n [1] => C\n [2] => 8\n [3] => C\n [4] => E\n )
        Danke für die Hilfe.

        Aber was ist die zweite Dimension?

        Kommentar


        • #5
          Zitat von protestix Beitrag anzeigen
          PHP-Code:
          preg_match_all("~#([0-9a-f]){6}~i"$temp$tempColors);
          var_dump($tempColors[0]); 
          das ergibt
          Array\n(\n [0] => Array\n (\n [0] => #502A26\n [1] => #54762C\n [2] => #A5B30A\n )\n\n [1] => Array\n (\n [0] => 6\n [1] => C\n [2] => A\n )
          ist schon besser aber noch nicht wirklich nutzbar.
          nur preg_match_all mit meinen ausdruck passt
          preg_match_all('/#([0-9]|[A-F]|[a-f]){6}/', $temp, $tempColors);
          danke für die Hilfe

          Kommentar


          • #6
            Bei mir ergibt das mit var_dump als Ausgabe
            Code:
            array (size=3)
              0 => string '#502A26' (length=7)
              1 => string '#54762C' (length=7)
              2 => string '#A5B30A' (length=7)
            Irgendwas hast du anders gemacht.
            Und der Reguläre Ausdruck entspricht deinem nur ein wenig übersichtlicher.

            Kommentar


            • #7
              PHP-Code:
              preg_match_all("~#([0-9a-f]{6})~i"$temp$tempColors); 
              http://php.net/manual/de/regexp.refe...repetition.php
              Signaturrrrrrr

              Kommentar


              • #8
                K313
                Das Ergebnis bleibt aber gleich. Kannst du das aufklären?.

                Kommentar


                • #9
                  Zitat von protestix Beitrag anzeigen
                  K313
                  Das Ergebnis bleibt aber gleich. Kannst du das aufklären?.
                  Bei mir nicht.

                  ([a-f0-9]{6}) - die Zeichenkette aus 6 Simbolen,
                  PHP-Code:
                  array(2) { [0]=> array(3) { [0]=> string(7"#502A26" [1]=> string(7"#54762C" [2]=> string(7"#A5B30A" } [1]=> array(3) { [0]=> string(6"502A26" [1]=> string(6"54762C" [2]=> string(6"A5B30A" } } 
                  ([a-f0-9]){6} - nur sechste Simbol aus gefundener Zeichenkette.
                  PHP-Code:
                  array(2) { [0]=> array(3) { [0]=> string(7"#502A26" [1]=> string(7"#54762C" [2]=> string(7"#A5B30A" } [1]=> array(3) { [0]=> string(1"6" [1]=> string(1"C" [2]=> string(1"A" } } 
                  Mehr sieht nach "die Zeichenkette aus sechs Übereinschtimmungen, aber nur die letzte wird gespeichert, weil für alle sechs nur ein Speicherplatz eingegeben wurde, und daswegen jede vorherige Übereinstimmung wurde von den nechsten überschrieben".

                  Ah, ja. Hab vergessen zu sagen. Ich sitze auf PHP5 (Window 7), wahrscheinlich darum gibt's zwischen unseren Ergebnissen solche Unterschied...
                  Signaturrrrrrr

                  Kommentar


                  • #10
                    Zitat von psygonis Beitrag anzeigen
                    Hallo,
                    ich habe eine Textdatei, die neben vielen anderen werten auch Hexadezimalfarbcodes enthält. Ich möchte mit Hilfe eines regulären Ausdrucks nun alle Hexcodes auslesen.
                    In der Datei steht z.B.
                    Code:
                    <![CDATA[
                    .fil1 {fill:#502A26;fill-rule:nonzero}
                    .fil2 {fill:#54762C;fill-rule:nonzero}
                    .fil0 {fill:#A5B30A;fill-rule:nonzero}
                    .fil3 {fill:white;fill-rule:nonzero}
                    ]]>
                    Ich weiß nicht wo die "textdatei" her ist und wie Du diese ab und an erneuerst.
                    CDATA macht den Eindruck url, der body selbst hat was von invalid json.
                    Eine Aufklärung über die Umstände hilft möglicherweise das Problem genauer zu betrachten.


                    Ah, ja. Hab vergessen zu sagen. Ich sitze auf PHP5
                    Puh ich dachte schon ich bin der einzige hier.

                    Kommentar


                    • #11
                      Gut, der Unterschied wird sichtbar wenn man Array[1] mit berücksichtigt, das habe ich aber nicht getan, sondern greife nur auf Array[0] oder $tempColors[0] zu, da ist es dann gleich. aber danke für die erhellende Aufklärung.

                      Puh ich dachte schon ich bin der einzige hier.
                      Ganz bestimmt nicht

                      Kommentar

                      Lädt...
                      X