Как удалить все из твита, но простой текст с помощью php?
Я пытаюсь избавиться от URL, упоминаний, хэштегов от твита, чтобы получить только реальный текст, а не:
Hello this is a test @someone #tag1 #tag2 http://bit.ly/123
это было бы просто:
Hello this is a test
Я верю, что мне придется использовать какое-то регулярное выражение, но я ужасен в этом, кто-то может указать мне правильное направление?
Заранее спасибо.
2 ответа
Решение
Вот как это сделать в трех регулярных выражениях (возможно, вы можете объединить все три в одно, но давайте не будем!)
$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
Preg_replace() сделает работу
$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);