只有当hashtag位于字符串末尾的任何位置时,我才需要从hashtags中删除#字符。例子:
本月我要去#Disney! #WDW
本月我要去#Disney。 #WDW #Orlando
本月我要去#Disney #WDW #Orlando
他们需要转换为:
本月我要去迪斯尼!
本月我要去迪士尼。
本月我要去迪士尼
此代码将删除所有#字符:
function remove_hashtags($string){
$result = preg_replace('/#([\w-]+)/i', '$1', $string);
return $result;
}
...但在此之前,需要删除字符串末尾的主题标签(或一组主题标签)。
答案 0 :(得分:6)
这个怎么样?
function remove_hashtags($string){
return str_replace('#', '',
preg_replace('/(?:#[\w-]+\s*)+$/', '', $string));
}
我在这里假设您只需删除所有'#'字符 - 而不仅仅是“hashtag identifier candidates”(=匹配[\w-]+
模式)后面的字符。
如果那是您的任务,则应相应调整代码:
function remove_hashtags($string){
return preg_replace('/#(?=[\w-]+)/', '',
preg_replace('/(?:#[\w-]+\s*)+$/', '', $string));
}
我在这里用先行替换了捕获组。此外,在两种情况下都不需要/i
修饰符:\w
特殊字符涵盖a-z
和A-Z
范围。