Löschen / Ersetzen von - bis

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

  • Löschen / Ersetzen von - bis

    Hallo. Gibt es eine Funktion, mit der ich etwas aus einem Text mit php etwas automatish herauslöschen kann?
    zum Beispiel Text:
    PHP-Code:
     <br /><a href="zujzujzujz.fr">uiik </a>testtesttest und was noch so drinsteht alles unterschiedlich</td></tr
    zu ersetzen mit
    PHP-Code:
    <br /></td></tr

  • #2
    str_replace?
    [FONT="Helvetica"]twitter.com/unset[/FONT]

    Shitstorm Podcast – Wöchentliches Auskotzen

    Kommentar


    • #3
      Ja, aber damit kann ich ja nur definiertes ersetzen. Ich will entweder alles davor oder alles danach rausschmeißen

      Kommentar


      • #4
        dann nimm preg_replace().

        Kommentar


        • #5
          Dann solltest du dich evtl. klarer ausdrücken. Regular Expressions sind das, was du suchst.
          [FONT="Helvetica"]twitter.com/unset[/FONT]

          Shitstorm Podcast – Wöchentliches Auskotzen

          Kommentar


          • #6
            Das geht auch nicht.
            Es soll ab einer bestimmten Zeichenkette bis zu einer bestimmten Zeichenkette alles gelöscht werden

            Kommentar


            • #7
              Doch, das geht mir Regular Expressions!
              [FONT="Helvetica"]twitter.com/unset[/FONT]

              Shitstorm Podcast – Wöchentliches Auskotzen

              Kommentar


              • #8
                Original geschrieben von ollimagic
                Das geht auch nicht.
                Es soll ab einer bestimmten Zeichenkette bis zu einer bestimmten Zeichenkette alles gelöscht werden
                Natürlich geht das, zeige, was du mit RegEx versucht hast!

                Kommentar


                • #9
                  Oder alternativ mit strpos und substr.

                  Kommentar


                  • #10
                    Ist ja nicht immer gleich lang. RegEx verstehe ich gar nicht was gemeit ist und parse_str hat auch nicht geklappt.

                    Kommentar


                    • #11
                      Original geschrieben von ollimagic
                      Ist ja nicht immer gleich lang. RegEx verstehe ich gar nicht was gemeit ist und parse_str hat auch nicht geklappt.
                      Müde?

                      Hier eine meiner Meinung nach sehr gute Ressource zu Regulären Ausdrücken (Regular Expressions). Die Thematik ist zugegeben nicht ohne, aber von äußerst großem Nutzen, wenn du die Materie erstmal beherrschst. Reguläre Ausdrücke erlauben dir nämlich Mustersuchen und -Ersetzungen.


                      Grüße
                      Nieder mit der Camel Case-Konvention

                      Kommentar


                      • #12
                        Ja, müde bin ich auch noch dazu.
                        Ich denke das preg_replace wohl doch das beste ist, aber im Moment weiss ich nicht, wie ich das am besten einsetze.

                        Was da zu löschen ist wäre alles von:
                        <td> bis zu <img border=
                        und alles nach:
                        <strong> bis zu </a></td>
                        Wie ich alles dazwischen lösche habe ich nun schon rausgefunden allerdings löscht es dann auch die Sachen, die ich als Eingabe habe wie z.B. </a></td>
                        Ich werde mal drüber schlafen, vielleicht fällt mir noch etwas ein.

                        Kommentar


                        • #13
                          Generell lässt sich ein solches Problem am einfachsten mit RegEx lösen (wenn man sich damit auskennt). Allerdings sollte man immer nach einer anderen Lösung suchen, da RegEx zwar schön zu verwenden ist, aber von der Performance her ziemlich langsam werden kann, vor allem, wenn man mit großen Datenmengen arbeitet.

                          Dieses Problem lässt sich auch so lösen:

                          PHP-Code:
                          function replaceFromTo($from$to$replace$text){
                              if (!
                          is_array($from)) $from = array($from);
                              if (!
                          is_array($to)) $to = array($to);
                              if (!
                          is_array($replace)) $replace = array($replace);
                              if (
                          count($from) == || count($to) == || count($replace) == 0)
                                  return 
                          $text;

                              foreach(
                          $from as $i => $start){
                                  
                          $end $to[min($icount($to) - 1)];
                                  
                          $rep $replace[min($icount($replace) - 1)];
                                  
                          $posStart strpos($text$start);
                                  if (
                          $posStart !== false) {
                                      
                          $posEnd strpos($text$end$posStart);
                                      if (
                          $posEnd !== false) {
                                          
                          $text substr($text0$posStart strlen($start))
                                           . 
                          $rep substr($text$posEnd);
                                      }
                                  }
                              }

                              return 
                          $text;
                          }

                          function 
                          deleteFromTo($from$to$text){
                              return 
                          replaceFromTo($from$to''$text);
                          }

                          echo 
                          replaceFromTo('XXX''YYY''z''aaaXXXaaaYYYaaa'); // aaaXXXzYYYaaa
                          echo deleteFromTo('XXX''YYY''aaaXXXaaaYYYaaa'); // aaaXXXYYYaaa 
                          Mit RegEx geht das natürlich kürzer:
                          PHP-Code:
                          echo preg_replace('@(XXX)(.*?)(YYY)@s''$1$3''aaaXXXaaaYYYaaa'); // aaaXXXYYYaaa 

                          Kommentar


                          • #14
                            Original geschrieben von MarkusW
                            Generell lässt sich ein solches Problem am einfachsten mit RegEx lösen (wenn man sich damit auskennt). Allerdings sollte man immer nach einer anderen Lösung suchen, da RegEx zwar schön zu verwenden ist, aber von der Performance her ziemlich langsam werden kann, vor allem, wenn man mit großen Datenmengen arbeitet.
                            Dass man immer nach einer anderen Lösung suchen sollte, würde ich nicht so stehen lassen wollen. Solche Mustersuchen können durchaus ihre Kosten an die Performance eines Skripts stellen, so, wie bereits gesagt, z.b. bei größeren Textmengen, insbesondere aber, wenn die Muster komplizierter werden und (zudem) suboptimal gebaut sind. Nichtsdestotrotz haben sie ihren Nutzen, für den sie konzipiert worden sind und sind eben nicht notwendigerweise (!) langsamer, als andere Herangehensweisen. Beispielsweise läuft deine Funktion nach einigen simplen Messungen langsamer als die Ersetzung mittels preg_replace. Zudem bedarf es einem gewissen Arbeitsaufwand, jede x-beliebige Funktionalität, die ein spezifischer Regulärer Ausdruck bieten würde, entsprechend mit String-Funktionen zu umschreiben (was wiederum Zeit kostet). Ich denke man sollte eher abwägen, wann es angemessen hinsichtlich der Optimalität ist und wann nicht. Und für dieses Beispiel würde ich zur Regex greifen.


                            Grüße
                            Nieder mit der Camel Case-Konvention

                            Kommentar

                            Lädt...
                            X