Roger: preg_replace - wörter aus array im text verlinken

moin!

ich versuche krampfhaft mit u.g. script die wörter im text mit einem script + parameter zu verlinken. ich weiss leider nicht weiter. kann mir jemand helfen?

<?

$str = "Flächenstilllegung ist ein Instrument der gemeinschaftlichen Marktordnung (EU) zur Erzeugungsbegrenzung, hauptsächlich für Getreide.";
$terms = array("/Instrument/", "/Marktordnung/", "/Getreide/");
$target = array("1", "2", "3");

echo preg_replace ($terms, "<a href="script.php?cmd=".$target."">".$terms."</a>", $str);

?>

ausgegeben wird das:
"Flächenstilllegung ist ein Array der gemeinschaftlichen Array (EU) zur Erzeugungsbegrenzung, hauptsächlich für Array."
wobei "Array" bereits verlinkt ist...

gruß.
roger.

--
Dein eigenes Newslettersystem auf deiner Homepage: http://newsletter.maennchen1.de
  1. Hallo Roger,

    $terms = array("/Instrument/", "/Marktordnung/", "/Getreide/");
    $target = array("1", "2", "3");

    Du baust hier 2 Arrays....

    "Flächenstilllegung ist ein Array der gemeinschaftlichen Array (EU) zur Erzeugungsbegrenzung, hauptsächlich für Array."

    ...und wunderst dich hier darueber, dass die beiden vom Typ Array sind?

    Du kannst das zB. in einer Schleife machen
    for ($i = 0; $i < count($terms); $i++)
    {
      $str = str_replace ($terms[$i], "<a..." . $target[$i] ... $terms[$i] ....., $str)
    }

    Gruß,

    Dieter

    1. moin!

      auf der manual seite scheint es aber auch zu funktionieren:
      <?php
      $zeichenkette = "Der schnelle braune Fuchs sprang über den faulen Hund.";

      $suchmuster[0] = "/schnelle/";
      $suchmuster[1] = "/braune/";
      $suchmuster[2] = "/Fuchs/";

      $ersetzungen[2] = "Bär";
      $ersetzungen[1] = "schwarze";
      $ersetzungen[0] = "langsame";

      echo preg_replace($suchmuster, $ersetzungen, $zeichenkette);
      ?>
      (http://de3.php.net/preg_replace)
      wo liegt denn jetzt da der unterschied?

      gruß.
      roger.

      --
      Dein eigenes Newslettersystem auf deiner Homepage: http://newsletter.maennchen1.de
      1. Huhu Roger

        wo liegt denn jetzt da der unterschied?

        Der Unterschied ist bei den Argumenten im Funktionsaufruf.

        Im Manual-Beispiel steht
        preg_replace( (array), (array), (string));

        in Deinem Beispiel aber

        preg_replace ((array), (string), (string));

        Viele Grüße

        lulu

        --
        bythewaythewebsuxgoofflineandenjoytheday
  2. Hallo Roger,

    Der Unterschied liegt darin, dass du Datentypen vermischst, das Beispiel im Manual nicht.
    Durch das Concatinieren von '<a href....' . $terms bzw $topics, werden diese als String behandelt und zwar als der String 'Array'.

    Gruß,

    Dieter

    1. moin!

      aso. ok. danke.
      dann wohl doch mit ner for-schleife...

      gruß.
      roger.

      --
      Dein eigenes Newslettersystem auf deiner Homepage: http://newsletter.maennchen1.de
  3. moin!

    ich bin auf ein weiteres problem gestoßen und mach einfach mal in dem thread hier weiter.
    ich suche mittlerweile mit folgendem pattern meinen text ab:
    $suchen = "/(".quotemeta($terms['term']).")/";
    das klappt auch ganz gut. allerdings möchte ich das ganz gern noch verfeinern. ich möchte, dass der komplette suchausdruck bis zum ersten komma, punkt oder leerzeichen nach dem suchwort gefunden wird. das macht sich ganz gut, wenn nach streuobstwiese gesucht wird und das wort streuobstwiesen dann ohne dem letzten "n" verlinkt wird, weil ja "streuobstwiese" mit drin steckt.

    weiß jemand, inwieweit ich den pattern modifizieren müsste?

    gruß.
    roger.

    --
    Dein eigenes Newslettersystem auf deiner Homepage: http://newsletter.maennchen1.de
    1. Huhu roger

      das macht sich ganz gut, wenn nach streuobstwiese gesucht wird und das wort streuobstwiesen dann ohne dem letzten "n" verlinkt wird, weil ja "streuobstwiese" mit drin steckt.

      soll dann

      <a href="wasauchimmer">Streuobstwiese</a>n

      oder

      <a href="wasauchimmer">Streuobstwiesen</a>

      dabei herauskommen?

      Oder ist das Problem, dass bei "Streuobstwiese" auch

      Streuobstwiesen, Streuobstwiesendünger, Streuobstwiesenfest

      gefunden werden sollen?

      Viele Grüße

      lulu

      --
      bythewaythewebsuxgoofflineandenjoytheday
      1. moin!

        letzteres. alles was mit streuobstwiese anfängt.

        gruß.
        roger.

        --
        Dein eigenes Newslettersystem auf deiner Homepage: http://newsletter.maennchen1.de
        1. Hallo Roger

          letzteres. alles was mit streuobstwiese anfängt.

          Das könnte funktionieren

          $suchen = "/\b(".quotemeta($terms['term'])."\w*)\b/";

          \b für word-boundary soll dafür sorgen, dass
          "Katzenstreuobstwiesen" nicht gefunden wird.

          \w* sind beliebig viele (oder gar keines) weitere Zeichen (word character)

          Da findest Du genaue Informationen
          http://de3.php.net/manual/de/reference.pcre.pattern.syntax.php

          Probier es mal aus, ich habe dass jetzt nicht getestet

          Viele Grüße

          lulu

          --
          bythewaythewebsuxgoofflineandenjoytheday
          1. moin!

            ich werd bekloppt!
            genial! und das ohne test! n1! funktioniert wie gewollt. :D
            allerdings wird jetzt nicht mehr "Roger (Dummbatz)" erkannt. liegt dann wohl sicherlich am \w*, oder?

            gruß.
            roger.

            --
            Dein eigenes Newslettersystem auf deiner Homepage: http://newsletter.maennchen1.de
            1. Huhu Roger

              allerdings wird jetzt nicht mehr "Roger (Dummbatz)" erkannt. liegt dann wohl sicherlich am \w*, oder?

              Ja, da Whitspace und "()" nicht als Wortzeichen gelten.

              Wenn Du soetwas mtchen willst musst Du Dir eine eigene Zeichklasse zusammenstellen.

              Also statt

              \w*

              z.B.

              [a-zA-Z0-9()]

              Viele Grüße

              lulu

              --
              bythewaythewebsuxgoofflineandenjoytheday
              1. moin!

                danke!
                hast mir schonmal sehr weit geholfen. regexp sind für mich irgendwie wie ein rotes tuch. ich glaub ich belasse das bei dem \w*, weil wenn man da weitermacht ("man könnte..." und "was wäre wenn..."), ich glaub, da kommt man zu keinem ende. das thema scheint ziemlich komplex zu sein.
                so wie es jetzt funktioniert, reicht es mir eigentlich auch. da kann ich mit leben, das wortgruppen (mit in klammern gesetzten wörtern) nicht erkannt werden.

                gruß.
                roger.

                --
                Dein eigenes Newslettersystem auf deiner Homepage: http://newsletter.maennchen1.de
            2. hi,

              ich werd bekloppt!

              viel spaß dabei!!!1

              n1!

              soll heißen? "none"?

              allerdings wird jetzt nicht mehr "Roger (Dummbatz)" erkannt. liegt dann wohl sicherlich am \w*, oder?

              nein, das liegt daran, dass in "Roger (Dummbatz)" das wort "streuobstwiese" gar nicht vorkommt :-)

              will sagen: bitte konkretes & aktualisiertes beispiel bringen, welcher suchausdruck worauf nicht matcht.

              gruß,
              wahsaga

              --
              "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
              1. moin!

                hi,

                ich werd bekloppt!

                viel spaß dabei!!!1

                bli bla blub, ich kack dir in die supp. :)

                n1!

                soll heißen? "none"?

                nice one.

                nein, das liegt daran, dass in "Roger (Dummbatz)" das wort "streuobstwiese" gar nicht vorkommt :-)

                hehe, wahrscheinlich ;)

                gruß.
                roger.

                --
                Dein eigenes Newslettersystem auf deiner Homepage: http://newsletter.maennchen1.de
                1. hi,

                  ich werd bekloppt!

                  viel spaß dabei!!!1

                  bli bla blub, ich kack dir in die supp. :)

                  wer hätte gedacht, dass du bei diesem vorhaben derart schnell fortschritte zu vermelden hast :-)

                  gruß,
                  wahsaga

                  --
                  "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
                  1. moin!

                    wer hätte gedacht, dass du bei diesem vorhaben derart schnell fortschritte zu vermelden hast :-)

                    hehe. jaja, wer hätte das gedacht? bei dem einen geht's schnell, bei dem anderen noch schneller :D

                    gruß.
                    roger.

                    --
                    Dein eigenes Newslettersystem auf deiner Homepage: http://newsletter.maennchen1.de