thomas: If else Anweisung in preg_replace

Guten Abend

Ich versuche verzweifelt mit folgendem Code meine Twitter-Timeline formatiert auf meiner Seite auszugeben:

$json_text = preg_replace("!(^|[^\"=]{1})(\#|@)([^\s<>]+)([\s\n<>]|$)!sme", "'\\1<a href=\"" . (('\\2' == "#") ? "http://search.twitter.com/search?q=\\3" : "http://twitter.com/#!/\\3") . "\" target=\"_blank\">\\2\\3</a>\\4'", $json[$i]->{'text'});  

Mein Ziel ist es, bei einem # einen anderen Link zu generieren als bei einem @.

Vielen Dank, Tom

  1. Hi, dann führe 2 mal preg_replace aus, einmal mit dem einen Pattern und einmal mit dem anderen. Beide zugleich dürften ja nicht zutreffen?
    Gruss, Frank

  2. Hallo,

    $json_text = preg_replace("!(^|[^"=]{1})(#|@)([^\s<>]+)([\s\n<>]|$)!sme", "'\1<a href="" . (('\2' == "#") ? "http://search.twitter.com/search?q=\3" : "http://twitter.com/#!/\3") . "" target="_blank">\2\3</a>\4'", $json[$i]->{'text'});

    Du hast dort mindestens einen Kontextwechsel, wenn du den String des "$replacement" verkettest, den du nicht beachtest. Ansonsten kann ich [conditional subpatterns](http://www.php.net/manual/de/regexp.reference.conditional.php) empfehlen.  
      
    Grüße  
    
    
  3. Guten Abend

    Ich versuche verzweifelt mit folgendem Code meine Twitter-Timeline formatiert auf meiner Seite auszugeben:

    $json_text = preg_replace("!(^|[^"=]{1})(#|@)([^\s<>]+)([\s\n<>]|$)!sme", "'\1<a href="" . (('\2' == "#") ? "http://search.twitter.com/search?q=\3" : "http://twitter.com/#!/\3") . "" target="_blank">\2\3</a>\4'", $json[$i]->{'text'});

    
    >   
    > Mein Ziel ist es, bei einem # einen anderen Link zu generieren als bei einem @.  
    >   
    > Vielen Dank, Tom  
      
    Versuchs mal mit einem bedingten Unterausdruck:  
    http://regexp-evaluator.de/tutorial/bedingte-unterausdruecke/  
      
    Alternativ kannst du auch arrays verwenden:  
      
    $text = "Ich bin ein link der ersten Kategorie : regex1 und ich hier der 2. : regex2";  
    $suchmuster = array('#\w+1#', '#\w+2#');  
    $ersetzung = array('der eine link 1', 'der andere link 2');  
      
    echo preg\_replace($suchmuster, $ersetzung, $text);