benni.: Reguläre Ausdrücke: Probleme mit Ersetzen

Auf meiner Homepage (dvd.wopc.de - World of PC) habe ich einen String, der nachher so angezeigt wird:

Pierce Brosnan (James Bond)
Sophie Marceau (Elektra King)
Robert Carlyle (Renard)
Denise Richards (Dr. Christmas Jones)
Robbie Coltrane (Valentin Zukovsky)
Judi Dench (M)
Desmond Llewelyn (Q)
John Cleese (R)

Der String:

$darsteller = "Pierce Brosnan (James Bond)<br>Sophie Marceau (Elektra King)<br>Robert Carlyle (Renard)<br>Denise Richards (Dr. Christmas Jones)<br>Robbie Coltrane (Valentin Zukovsky)<br>Judi Dench (M)<br>Desmond Llewelyn (Q)<br>John Cleese (R)";

Nun will ich, dass die Schauspielernamen (also die Namen ausserhalb der Klammern) mit einem Link versehen werden, also so:

<a href="dvd_suche.php?darsteller=Pierce+Brosnan">Pierce Brosnan</a> (James Bond)....

Natürlich ist das bei jedem Namen und jeder Seite anders, wer kann also helfen, denn ich krieg das mit ereg_replace nicht auf die Reihe.

Vielen Dank schon im Voraus,
Benjamin Mack

  1. Hallo Benni,

    ereg_replace ist dafür auch nicht das richtige Mittel.

    $darsteller = "Pierce Brosnan (James Bond)
    Sophie Marceau (Elektra King)
    Robert Carlyle (Renard)
    Denise Richards (Dr. Christmas Jones)
    Robbie Coltrane (Valentin Zukovsky)
    Judi Dench (M)
    Desmond Llewelyn (Q)
    John Cleese (R)";

    Wenn du die Schauspieler schon in einer Variablen abspeicherts dann doch am besten gleich als array in der Form:

    $darsteller = array("Pierce#Brosnan#James Bond", "Sophie#Marceau #Elektra King",...);

    oder als assoziertes Array in der Form:
    $darsteller = array("Pierce Brosnan" => "James Bond",...);

    Jetzt kannst du das array in einer Schleife durchspulen und mit:
    $schauspieler = split("#",$darsteller[$schleifenzähler]) zerlegen

    <a href="dvd_suche.php?darsteller=Pierce+Brosnan">Pierce Brosnan</a> (James Bond)....

    der Link könnte dann so aussehen:
    <a href="dvd_suche.php?darsteller=".$schauspieler[0]."+".$schauspieler[1]">".$schauspieler[0]." ".$schauspieler[1]."</a>"....

    genauer ist das unter www.php3.net nachzulesen

    SolOng
    Stephan

    1. Uuups, sorry der Link heisst: http://www.php.net und lässt sich jetzt auch anklicken.

      SolOng
      Stephan

    2. Hallo Stephan!

      ereg_replace ist dafür auch nicht das richtige Mittel.

      Wenn du die Schauspieler schon in einer Variablen abspeicherts dann doch am besten gleich als array in der Form:

      $darsteller = array("Pierce#Brosnan#James Bond", "Sophie#Marceau #Elektra King",...);

      oder als assoziertes Array in der Form:
      $darsteller = array("Pierce Brosnan" => "James Bond",...);

      Das Problem ist, dass das in einer MySQL - db drin ist und somit sehr schwer zu ändern ist.

      Ich hab gehört, dass ereg_replace das schon machen könnte, oder nicht ?

      1. Hi,

        ereg_replace ist dafür auch nicht das richtige Mittel.

        Warum? ereg_replace ist dafür genau das richtige Mittel, bzw.
        ereg_replace in Verbindung mit ereg.

        also, erstmal die Var:

        $darsteller = "Pierce Brosnan (James Bond)<br>blalba (wasweissich welcher Film)<br>....";

        OK, als erstes muessen wir den String parsen, damit wir wissen,
        welcher Schauspieler in den Link soll:

        if(ereg("(.*) (.*)",$darsteller,$regs))
        {
        // Dann die Ergebnisse durchgehen und den Text durch den
        // Link ersetzen
        for($i=1;$i<=count($regs);$i++)
          {
          $href = ereg_replace(" ","+",$regs[$i]);

        $link = "<a href="dvd_suche.php?darsteller=$href">".$regs[$i]."</a>";
          $darsteller = ereg_replace($regs[$i],$link,$darsteller);
          }

        }

        echo $darsteller;

        So sollte es eigentlich klappen ,)

        mfg
        CK1

        1. Erst einmal Danke an euch beide für die Hilfe, aber ich habe den String mithilfe von explode zerlegt, ist zwar ein wenig umständlich aber praktisch.

          Wer genau wissen will, wie - einfach mailen