2012-11-19 73 views
3

只有當標籤位於字符串末尾的任何位置時,我才需要從#標籤中刪除#字符。示例:匹配並刪除字符串中的Twitter標籤標籤

我要去#Disney本月! #WDW

我要去#Disney這個月。 #WDW #Orlando

我要#Disney本月#WDW #Orlando

他們需要被轉換爲:

我這個月要去迪士尼!

我要去迪士尼這個月。

我要去迪士尼本月

此代碼將刪除所有#字符:

function remove_hashtags($string){ 
    $result = preg_replace('/#([\w-]+)/i', '$1', $string); 
    return $result; 
} 

...但在此之前,包括hashtag(或主題標籤組)在需要刪除字符串的末尾。

+0

小心使用這個考慮一個字符串與實體將被刪除我'米 – woodscreative

回答

6

這個怎麼樣?

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)); 
} 

我已經更換了捕獲組,先行在這裏。此外,兩種情況下都不需要/i修飾符:\w特殊字符涵蓋a-zA-Z範圍。

+0

優雅和有效的解決方案,謝謝! – andufo

+2

這也刪除了像'這樣的實體 – woodscreative