مساعدة بشأن preg_replace، والتوقف عند الأحرف غير alpa_numeric

StackOverflow https://stackoverflow.com/questions/1265676

سؤال

أحتاج إلى بعض المساعدة في تحسين هذه الوظيفة التي قمت بها لتحليل الروابط في تويتر.يقوم بإنشاء روابط لعلامات التصنيف و@replys.كل شيء يعمل بشكل جيد، والمشكلة هي أنه إذا كان الهاشتاج أو @reply يحتوي على علامة ترقيم في النهاية بدون مسافة، فسيتم إضافته إلى عنوان URL لـ HREF.

على سبيل المثال، إذا قمت بالتغريد "أنا حقًا أحب #pizza و#pop"، فسيكون رابط #pizza خاطئًا لأنه سيحتوي على فاصلة.

أنا لست جيدًا جدًا في استخدام Regex، وقد استغرق هذا بعض الوقت حتى أتمكن من العمل، لذا فإن أي مساعدة ستكون رائعة!

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;

}

هل كانت مفيدة؟

المحلول

أبسط تعديل للكود الخاص بك للقيام بما تريد:

$description = preg_replace("#(^|[\n ])\#(\w+)#ise", "'\\1<a href=\"".$pre."/hash/\\2\" rel=\"nofollow\" class=\"hash ".$colour."\">#\\2</a>'", $description);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top