匹配和删除字符串中的Twitter标签
仅当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-z
和A-Z
范围。
相关文章