3

仅当主题标签位于字符串末尾以外的任何位置时,我才需要从主题标签中删除 # 字符。例子:

这个月我要去#Disney!#WDW

这个月我要去#Disney。#WDW #奥兰多

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

它们需要转换为:

这个月我要去迪士尼!

这个月我要去迪士尼。

这个月我要去迪士尼

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

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

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

4

1 回答 1

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范围。

于 2012-11-19T15:27:32.073 回答