2012-04-15 3 views
2

Ich versuche von Urls loszuwerden, erwähnt, Hashtags von einem Tweet nur den eigentlichen Text zu erhalten, also statt:Wie man alles von Tweet entfernt, aber reinen Text mit PHP?

Hello this is a test @someone #tag1 #tag2 http://bit.ly/123

es sei einfach:

Hello this is a test

Ich glaube, ich müsste einen regelmäßigen Ausdruck verwenden, aber ich bin schrecklich darin, könnte mir jemand in die richtige Richtung zeigen?

Vielen Dank im Voraus.

Antwort

3

Hier ist, wie es reguläre Ausdrücke in drei zu tun (Sie wahrscheinlich alle drei in einer Einheit verschmelzen könnte, aber wir wollen nicht dorthin!)

$str = preg_replace('/(^|\b)@\S*($|\b)/', '', $str); // remove @someone 
$str = preg_replace('/(^|\b)#\S*($|\b)/', '', $str); // remove hashtags 

// taken from http://daringfireball.net/2010/07/improved_regex_for_matching_urls 
$urlRegex = '~(?i)\b((?:[a-z][\w-]+:(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:\'".,<>?«»“”‘’]))~'; 
$str = preg_replace($urlRegex, '', $str); // remove urls 
+0

Danke funktioniert wie ein Zauber – javiervd

+0

Wenn das nur mit UTF-Texten funktioniert – iTurki

4

A preg_replace() wird die Arbeit

$str = "Hello this is a test @someone #tag1 #tag2 http://bit.ly/123"; 
$str = preg_replace('/#([\w-]+)/i', '', $str); // @someone 
$str = preg_replace('/@([\w-]+)/i', '', $str); // #tag 
$str = preg_replace('/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/', '', $str); 
Verwandte Themen