匹配和删除字符串中的Twitter标签

2022-03-22 00:00:00 regex php preg-replace

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

这个月我要去#迪士尼!#wdw

这个月我要去#迪斯尼。#wdw#奥兰多

我这个月要去#迪士尼#wdw#奥兰多

需要转换为:

我这个月要去迪士尼!

这个月我要去迪士尼。

我这个月要去迪士尼

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

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

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


解决方案

这个怎么样?

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));
}

这里我已将捕获组替换为Look Ahead。另外,/i修饰符在这两种情况下都不需要:w特殊字符同时覆盖a-zA-Z范围。

相关文章