如何从Twitter标签中删除#?
问题描述:
我想脱掉来自Twitter的哈希标签#,所以:如何从Twitter标签中删除#?
Input: I love #winter and #ice-skating
Output: I love winter and ice-skating
我认为这会做的伎俩,但它并不:
$tweet = preg_replace('/#[^\s]*/i', '${1}', $tweet);
有人能向我解释为什么不?我应该改变什么?
答
你需要围绕你想在括号来捕捉部分:
$tweet = preg_replace('/#([\w-]+)/i', '$1', $tweet);
看到它联机工作:ideone
我也改变了正则表达式更具体,但对于连更好的正则表达式我是指你这个问题,它的答案(用于.NET但这个想法是在PHP相同):
答
- 你需要有一个子模式没有英镑符号匹配字符串
- 不要在替换字符串用花括号
$tweet = preg_replace('/#([^\s]*)/', '$1', $tweet);
答
更快的解决方案包1
:
$tweet = str_replace('#', '', $tweet)
没有正则表达式要求d
+2
然后字符串:'我的#是:1-54..'被弄坏了。 – 2012-02-05 22:21:33
+0
正确,但它可能已经足够;)当不Reveler应该使用你的或@MarkBayers解决方案 – veritas 2012-02-05 22:25:29
'-'不包含在'\ w'中。 – 2012-02-05 22:23:39
纠正我,如果我错了,但在“#12”#12不会是一个标签。即使如此,这个正则表达式也会以12取代#12。虽然这可能不会发生很多,但为了彻底,我会包含一个后台查看空间或字符串的开头。 – 2012-02-05 22:55:14