Textstellen exakt erkennen und ersetzten

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

  • Textstellen exakt erkennen und ersetzten

    Hallo Leute,

    ich habe da ein Problem.

    Ich habe einen Text. Dieser erhält 10 mal das Wort Test. Jetzt möchte ich das Wort Test ersetzen durch eine fortlaufende nummer, Also T1, T2, T3...

    Ich habe keinen Plan wie ich das machen soll.

    Wenn ich mit preg_match_all() arbeite und das wort Test habe, ist es aber immer noch nicht eindeutig identifiziert. Ein str_replace() ersetzt dann trotzdem alle Vorkommen von Test auf einmal.

    Wie kann ich das realisieren?

    Viele Grüße & Dank,
    Andi

  • #2
    PHP-Code:
    $wordcount=0;
    $text="Wort Wort Wort Wort Wort";
    echo 
    preg_replace("/wort/ei","replaceWord()",$text);
    function 
    replaceWord()
    {
        global 
    $wordcount;
        
    $wordcount++;
        return 
    "T".$wordcount;

    [color="#334D7B"]"Los, lass uns loslegen! Hm ? Quatschen können wir hinterher immer noch!"[/color]
    [color="#9C5245"]"Aber Bommel, wir können jetzt nicht bumsen. Wir müssen doch erst den Kindern - ... "[/color]
    [color="#334D7B"]"Ja ja ja. Du willst immer nur das Eine. Buchstabenzeigen, Buchstabenzeigen - meine Gefühle sind dir wohl scheißegal."[/color]

    © Harald Schmidt

    Kommentar


    • #3
      Danke für das Script,

      jetzt setze ich aber noch einen drauf, denn nun soll nur z.B. das 3 Wort ersetzt werden.

      Habe schon rumprobiert das irgendwie in eine Schleife zu setzen, aber ich brauch zum Zählen ja auf jeden fall den preg_replace() oder kann ich den Funktionsaufruf auch in einem preg_match_all() einbinden? Aber das liefert mir doch nur ein Array?!?

      Ah moment, wennich mit preg_match_all() alle Worte in ein Array hole kann ich ja dann die Position bestimmen welches... moment... quatsch! Beim ersetzten muß es ja dennoch wissen welches Wort und nicht alle gleichen Worte ersetzten.

      Sorry, keine Idee!


      Grüße, Andi

      Kommentar


      • #4
        vielleicht kannst du es ja mit preg_split() kombinieren...?

        damit kannst du einen string in ein array zerlegen, wobei immer an den stellen getrennt wird, an denen der reguläre ausdruck zutrifft.

        und wenn du jetzt danach preg_replace nur auf das array-element deiner wahl anwendest... könnte funktionieren.
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          Nur jedes 3. Wort ? Kein Problem:

          PHP-Code:
          $wordcount=0;
          $text="Wort Wort Wort Wort Wort Wort Wort Wort Wort";
          echo 
          preg_replace("/(wort)/ei","replaceWord(\"\\1\")",$text);
          function 
          replaceWord($word)
          {
              global 
          $wordcount;
              
          $wordcount++;
              if(
          $wordcount%== 0) return "T".$wordcount;
              else return 
          $word;

          [color="#334D7B"]"Los, lass uns loslegen! Hm ? Quatschen können wir hinterher immer noch!"[/color]
          [color="#9C5245"]"Aber Bommel, wir können jetzt nicht bumsen. Wir müssen doch erst den Kindern - ... "[/color]
          [color="#334D7B"]"Ja ja ja. Du willst immer nur das Eine. Buchstabenzeigen, Buchstabenzeigen - meine Gefühle sind dir wohl scheißegal."[/color]

          © Harald Schmidt

          Kommentar


          • #6
            OK, ich denke das geht, aber jetzt habe ich noch das Problem, dass ich in RegExp nicht so fitt bin und nicht weis, wie ich diese definieren muß.
            Und zwar soll immer da getrennt werden, wo ein Link auftritt, also wo dann "<a" auftaucht.

            Ich habe es schon so probiert, aber es funktioniert nicht. Habe auch scon das <a in eckige klammern gesetzt, aber ich habe keine Ahnung.
            $split = preg_split("<a", $content);

            Wie baut sich eigentlich das Array auf? Ich kenne das nur von preg_match_all() aber im Hanbuch steht hier für eine andere Struktur.

            $array[x]
            |
            -> [0] content
            -> [1] position

            Also müßte dann doch in $split[0][0] der erste Teil des Contents sein. Wo wird eigentlich gesplittet, vor oder nach der Trennung. Wenn davor, dann müßte mein Link also in $split[1][0] sein.
            Setzte ich dann nach dem Bearbeiten meinen Content quasi wieder so zusammen:
            for ($i=0: $i < count($split); $i++){
            $neuer_content .= $split[$i][0];
            }

            Bitte um Hilfe!


            Grüße & Dank,
            Andi

            Kommentar


            • #7
              @ Troublegum: Ah, ist ja einfacher als mit preg_split(). Ich werde es probieren.
              Aber nicht jedes 3. Wort sondern NUR das 3. Aber das ist ja klar !

              Trotzdem brauche ich den RegExp für deas erkennen eines Links

              Grüße, Andi
              Zuletzt geändert von andik2000; 02.04.2003, 11:30.

              Kommentar


              • #8
                Ja, nur das dritte ist noch einfacher. Einfach $wordcount==3 anstatt $wordcount%3 == 0 abfragen.
                [color="#334D7B"]"Los, lass uns loslegen! Hm ? Quatschen können wir hinterher immer noch!"[/color]
                [color="#9C5245"]"Aber Bommel, wir können jetzt nicht bumsen. Wir müssen doch erst den Kindern - ... "[/color]
                [color="#334D7B"]"Ja ja ja. Du willst immer nur das Eine. Buchstabenzeigen, Buchstabenzeigen - meine Gefühle sind dir wohl scheißegal."[/color]

                © Harald Schmidt

                Kommentar


                • #9
                  OK, ich merke gerade, das funktioniert alles nicht zusammen, das sind nur Teillösungen. Am besten ich beschreibe mal das Problem von Anfang an.

                  Ich bastele einen Editor für DB-gestützte Webseiten. Dieser soll nun Links bearbeiten können.
                  Die Links sind ganz normal aufgebaut <a href="seite.php4?id=20" target="_self">Hier der Link</a>

                  Es können natürlich auch externe Seiten angegeben werden, die dann als Target _blank haben.
                  Soweit funktionierte das auch schon, bis auf die Tatsache, wenn mal ein Link gleich heißt, gleiche URL und gleiches Target hat, kann ich den auf der seite nicht mehr unterscheiden. Wird einer geändert, wird ein evtl. zweites vorkommen mitgeändert. Auseinandertrennen kann ich die gleichen Links dann nicht mehr.

                  Darum meine Überlegung zu erkennen wie viele Links es gibt und dann zu sagen - ich bearbeite jetzt den zweiten Link oder den Vierten Links auf der Seite - unabhängig davon, ob die jetzt den gleichen Quellcode haben, wird aber nur der einzelne Link geändert und nicht alle.

                  Jetzt habe ich nämlich genau das umgekehrte Prinzip, dass nur noch gleiche Links erkannt und geändert werden, aber nicht mehr unterschiedliche.

                  Ich heul gleich!

                  Naja, vielleicht jat ja doch jemand Mitleid und eine passende Lösung für diese Problem.
                  Ich versuch mal weiter, vieleicht sehe ich auch nur den Wald vor lauter Bäumen nicht.

                  Grüße & Dank,
                  Andi

                  Kommentar

                  Lädt...
                  X