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

And*_* SK 3 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;
}
Run Code Online (Sandbox Code Playgroud)

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

rai*_*7ow 6

这个怎么样?

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

我假设你只需要删除所有'#'字符 - 而不仅仅是"hashtag identifier candidates"后面的字符(=匹配[\w-]+模式).

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

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

我在这里用lookahead取代了捕获组.此外,/i在两种情况下都不需要修饰符:\w特殊字符包括两者a-zA-Z范围.

  • 这也删除了像' (2认同)