If else Anweisung in preg_replace
thomas
- php
0 Frank (no reg)0 Blubb0 Sesca
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
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
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
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);