2

ツイートからURL、メンション、ハッシュタグを削除して、実際のテキストのみを取得しようとしています。

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

それはただだろう:

Hello this is a test

ある種の正規表現を使用する必要があると思いますが、それはひどいです。誰かが私を正しい方向に向けることができますか?

前もって感謝します。

4

2 に答える 2

4

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);
于 2012-04-15T18:40:19.397 に答える
4

これを3つの正規表現で行う方法を示します(3つすべてを1つにマージすることもできますが、そこには行かないでください!)

$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
于 2012-04-15T18:42:04.737 に答える