Ankündigung

Einklappen
Keine Ankündigung bisher.

wiedermal preg_match und preg_replace

Einklappen

Neue Werbung 2019

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

  • wiedermal preg_match und preg_replace

    Moin leute,

    ich hab mal wieder ein Problem mit den o.g. Funktionen.

    Folgendes problem:
    Ich habe Dateien in denen zeilen vorhanden sind:
    Code:
    <font face="verdana" size="2">text</font>
    ich möchte nun die size="2" durch style="font-size: 13px" ersetzen.
    Es sollen aber auch alle anderen size="?" ersetzt werden, aber nur in den font tags.

    Code:
      str_replace('size="1"', 'style="font-size: 10px"', $code);
      str_replace('size="2"', 'style="font-size: 13px"', $code);
      str_replace('size="3"', 'style="font-size: 16px"', $code);
      str_replace('size="4"', 'style="font-size: 18px"', $code);
    funktioniert nicht. was kann ich tun ?

    EDIT:

    d.h. ich müsste erstmal prüfen ob in der aktuellen zeile ein "font" steht:

    Code:
      if(preg_match("/font/i", $zeile)){
    um dann nach der size zu gucken:
    aber wie weiter ? ich brauch dann size, und den wert von size damit ich daraus dann die px für die font-size errechnen kann.
    keine


  • #2
    nimm preg_replace

    Das pattern ist:
    Code:
    @<font (.*)size="([\d]+)"(.*)>@iUe
    Ersatz:
    Code:
    "<font \\1style='font-size: ".funktion(\\2)."px'\\3>"
    Dann brauchst du noch die funktion "funktion":
    PHP-Code:
    <?php
    function funktion($zahl) {
      
    //zahl umrechnen
      
    return $neuezahl;
    }
    ?>
    alles ohne garantie

    Kommentar


    • #3
      moin danke für den tipp, ich habs im moment ganz bescheuert so:

      PHP-Code:
      <?php

      $file 
      fopen("text.htm""r");
      $a 0;

      while(!
      feof($file)){

       
      $line fgets($file1024);
       if(
      preg_match("/<font/i"$line)){
         
      $neuz $line;
         
      $lone explode(" "$line);
         
      $size sizeof($lone);

         for(
      $i=0;$i<=$size;$i++){
          if(
      preg_match("/size/i"$lone[$i])){
            
      $sizex $lone[$i];
            
      $sizex str_replace("/"""$sizex);
            
      $sizex str_replace("<"""$sizex);
            
      $sizex str_replace(">"""$sizex);
            
      $sizex str_replace("font"""$sizex);
            
      $sizex str_replace("br"""$sizex);
            
      $sizex str_replace("\r"""$sizex);
            
      $sizex str_replace("\n"""$sizex);
            
      $partx explode("\""$sizex);

            if(
      $partx[1] == 1){ $repl 'style="font-size: 10px"'; }
            if(
      $partx[1] == 2){ $repl 'style="font-size: 13px"'; }
            if(
      $partx[1] == 3){ $repl 'style="font-size: 16px"'; }
            if(
      $partx[1] == 4){ $repl 'style="font-size: 18px"'; }

            
      $toer 'size="'.$partx[1].'"';
            
      $neuz str_replace($toer$repl$neuz);

            
      $text "size=";

            if(!
      preg_match("/$text/i"$neuz)){ 
              echo 
      $neuz;
            }
          }
         }
       } else {
         echo 
      $line;
       }
      }

      fclose($file);

      ?>
      funtzt zwar sieht aber nich sehr fein aus
      ich probier deins mal.
      keine

      Kommentar


      • #4
        $sizex = str_replace("/", "", $sizex);
        $sizex = str_replace("<", "", $sizex);
        $sizex = str_replace(">", "", $sizex);
        $sizex = str_replace("font", "", $sizex);
        $sizex = str_replace("br", "", $sizex);
        $sizex = str_replace("\r", "", $sizex);
        $sizex = str_replace("\n", "", $sizex);
        Probier mal:

        $sizex = preg_replace('#(<|>|font|br|\r|\n)#i', '', $sizex);

        Wäre einfacher und kürzer

        Kommentar


        • #5
          oder str_replace() mit einem array aufrufen [wäre wahrscheinlich schneller]:
          PHP-Code:
          <?php
          $search 
          = array('/''<''>''font''br'"\r""\n");
          $sizex str_replace($search''$sizex);
          ?>

          Kommentar


          • #6
            Zitat von karl-150
            wäre wahrscheinlich schneller
            http://benchmark.nophia.de/benchmark...tzen-b-12.html

            Kommentar


            • #7
              [wäre wahrscheinlich schneller]:
              Sehr sehr unterschiedlich , hab es mal probiert

              Kommentar

              Lädt...
              X