如何从Twitter标签中删除#?

如何从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相同):

+0

'-'不包含在'\ w'中。 – 2012-02-05 22:23:39

+0

纠正我,如果我错了,但在“#12”#12不会是一个标签。即使如此,这个正则表达式也会以12取代#12。虽然这可能不会发生很多,但为了彻底,我会包含一个后台查看空间或字符串的开头。 – 2012-02-05 22:55:14

  1. 你需要有一个子模式没有英镑符号匹配字符串
  2. 不要在替换字符串用花括号
$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