Preg_replace ile yardımcı olmayan alpa_numeric karakteri durdurmak

1 Cevap php

Ben Twitter'da bağlantıları ayrıştırma için yapılan bu fonksiyonu iyileştirilmesi biraz yardıma ihtiyacım var. Bu hashtags ve @ Replys için bağlantılar oluşturur. Her sorunun bir hashtag veya @ cevap boşluk ile sonunda bir noktalama karakteri varsa, bu HREF URL eklendi alır olduğunu, gayet iyi çalışıyor.

Ben tweet eğer bunun bir virgül olacak beri Örneğin "Ben gerçekten # pizza ve # pop gibi", # pizza için bağlantı yanlış olur.

Ben Regex ile çok iyi değilim, bu sadece bu çalışma almak için bir süre götürdü, bu yüzden herhangi bir yardım harika olurdu!

function parse_tweet($description, $colour='', $external=false) {
if ($external == true) $pre = 'http://politwitter.ca'; else $pre = '';
$description = preg_replace("/(http:\/\/[^\s]+)/", "<a href=\"$1\" target=\"_blank\">$1</a>", $description);
$description = preg_replace("#(^|[\n ])((www|ftp)\.[^ \"\t\n\r<]*)#ise", "'\\1<a href=\"http://\\2\" target=\"_blank\">\\2</a>'", $description);
$description = preg_replace("#(^|[\n ])@([^ \"\t\n\r<]*)#ise", "'\\1<a href=\"".$pre."/user/\\2\" rel=\"nofollow\">@\\2</a>'", $description);
$description = preg_replace("#(^|[\n ])\#([^ \"\t\n\r<]*)#ise", "'\\1<a href=\"".$pre."/hash/\\2\" rel=\"nofollow\" class=\"hash ".$colour."\">#\\2</a>'", $description);
return $description;

}

1 Cevap

Ne istediğinizi yapmak için kod basit modifikasyon:

$description = preg_replace("#(^|[\n ])\#(\w+)#ise", "'\\1<a href=\"".$pre."/hash/\\2\" rel=\"nofollow\" class=\"hash ".$colour."\">#\\2</a>'", $description);