RegExp für preg_replace()

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

  • RegExp für preg_replace()

    Hallihallo,

    ich benötige einen regulären Ausdruck, um in einem preg_replace() Links in $content aufzuspüren und zu ersetzen.

    Die Links sind wie gewöhnlich <a href="link.html" target="_blank">Linkname</a>.
    Es sollte also alles in <a ... </a> gefunden werden.

    Achso, der gefundene Inhalt wird dann aneine Funktion weitergegeben.
    Momentan sieht das bei mir so aus:
    preg_replace("#<a (.*)</a>#isU","replaceWord(\"\1\")",$content);

    Die RegExp habe ich aus eine preg_match_all() wo ich die Links zerlege, aber hier scheint das nicht zu funktionieren.

    Suche Rat

    Grüße, Andi

  • #2
    Na ja, was willst du denn mit den Links machen?
    Vielleicht hilft dir der Codeschnipsel weiter..

    PHP-Code:
    $text "link1 kommt gleich..<a href='http://google.de' target='_blank' title='google'>google</a> <a href=test.php?action=toolbox>toolbox</a> test..";
    echo 
    $text;
    echo 
    preg_replace("#<a([^>]*)>([^<]+)</a>#esi""replaceLink(\"\\2\", \"\\1\")",$text);

    function 
    replaceLink($title$tag)
    {
        
    // possibly not needed
        
    $tag=stripslashes($tag);

        
    // extract url
        
    preg_match("#href=['\"]?([^\'\" ]+)['\"]?#is",$tag,$url);
        if(isset(
    $url[1])) $url=$url[1];
        else 
    $url="";
        
        
    // extract target
        
    preg_match("#target=['\"]?([^\'\" ]+)['\"]?#is",$tag,$target);
        if(isset(
    $target[1])) $target=$target[1];
        else 
    $target="";
        
        
    // do something here
        // return some value
        
    return "<b>hier war mal ein Link zu $url</b>";

    [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
      Ja, mit dieser RegExp gehts. Aber er müte dann aber doch auch <a (*)</a> erkennen, oder? Alles was doch in klammern steht wird in Gruppen abgelegt. Und 0 steht für das gesammte erkannte Muster. Wenn * für ein beliebiges Zeichen (und beliebig oft) steht, müßte mein Beispiel doch funktionieren ?!?

      Komisch auch, dass die Gruppe bei mir nur durch \\1 an die Funktion übergeben wird, in vielen Beispielen tauch aber auch nur ein \ auf.

      Warum ist das so?

      Grüße...

      Kommentar

      Lädt...
      X