匹配并删除字符串中的twitter标签

时间:2012-11-19 15:21:34

标签: php regex preg-replace

只有当hashtag位于字符串末尾的任何位置时,我才需要从hashtags中删除#字符。例子:

  

本月我要去#Disney! #WDW

     

本月我要去#Disney。 #WDW #Orlando

     

本月我要去#Disney #WDW #Orlando

他们需要转换为:

  

本月我要去迪斯尼!

     

本月我要去迪士尼。

     

本月我要去迪士尼

此代码将删除所有#字符:

function remove_hashtags($string){
    $result = preg_replace('/#([\w-]+)/i', '$1', $string);
    return $result;
}

...但在此之前,需要删除字符串末尾的主题标签(或一组主题标签)。

1 个答案:

答案 0 :(得分:6)

这个怎么样?

function remove_hashtags($string){
    return str_replace('#', '', 
        preg_replace('/(?:#[\w-]+\s*)+$/', '', $string));
}

我在这里假设您只需删除所有'#'字符 - 而不仅仅是“hashtag identifier candidates”(=匹配[\w-]+模式)后面的字符。

如果那是您的任务,则应相应调整代码:

function remove_hashtags($string){
    return preg_replace('/#(?=[\w-]+)/', '', 
        preg_replace('/(?:#[\w-]+\s*)+$/', '', $string));
}

我在这里用先行替换了捕获组。此外,在两种情况下都不需要/i修饰符:\w特殊字符涵盖a-zA-Z范围。