【问题标题】:How to remove everything from tweet but plain text with php?如何从推文中删除所有内容,但使用 php 删除纯文本?
【发布时间】:2012-04-27 05:30:43
【问题描述】:

我正在尝试从推文中删除 url、提及、主题标签,以便仅获取实际文本,而不是:

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

只是:

Hello this is a test

我相信我必须使用某种正则表达式,但我不擅长它,有人能指出我正确的方向吗?

提前致谢。

【问题讨论】:

    标签: php regex twitter plaintext tweets


    【解决方案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
    

    【讨论】:

      【解决方案2】:

      一个 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);
      

      【讨论】:

        猜你喜欢
        • 2011-05-13
        • 1970-01-01
        • 2015-09-18
        • 1970-01-01
        • 2010-11-26
        • 1970-01-01
        • 2022-01-23
        • 2014-03-14
        相关资源
        最近更新 更多