2012-11-19 70 views
3

只有当标签位于字符串末尾的任何位置时,我才需要从#标签中删除#字符。示例:匹配并删除字符串中的Twitter标签标签

我要去#Disney本月! #WDW

我要去#Disney这个月。 #WDW #Orlando

我要#Disney本月#WDW #Orlando

他们需要被转换为:

我这个月要去迪士尼!

我要去迪士尼这个月。

我要去迪士尼本月

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

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

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

+0

小心使用这个考虑一个字符串与实体将被删除我'米 – woodscreative

回答

6

这个怎么样?

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

我想在这里你只需要删除所有“#”字符 - 而不仅仅是那些其次是“井号标签标识的候选人”(=匹配[\w-]+模式)。

如果这是你的任务,代码应相应调整:

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

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

+0

优雅和有效的解决方案,谢谢! – andufo

+2

这也删除了像'这样的实体 – woodscreative