2012-02-05 140 views
2

我想脫掉來自Twitter的哈希標籤#,所以:如何從Twitter標籤中刪除#?

Input: I love #winter and #ice-skating 
Output: I love winter and ice-skating 

我認爲這會做的伎倆,但它並不:

$tweet = preg_replace('/#[^\s]*/i', '${1}', $tweet); 

有人能向我解釋爲什麼不?我應該改變什麼?

回答

7

你需要圍繞你想在括號來捕捉部分:

$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

3
  1. 你需要有一個子模式沒有英鎊符號匹配字符串
  2. 不要在替換字符串用花括號
$tweet = preg_replace('/#([^\s]*)/', '$1', $tweet); 
5

更快的解決方案包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