Соответствие и удаление твитер хэштегов в строке

Мне нужно удалить символ # из хэштегов только в том случае, если хэштег находится где угодно, но в конце строки. Примеры:

Я собираюсь в #Disney в этом месяце! #WDW

Я собираюсь в #Disney в этом месяце. #WDW # Орландо

Я собираюсь в #Disney в этом месяце #WDW # Орландо

Они должны быть преобразованы в:

Я собираюсь в Disney в этом месяце!

Я собираюсь в Disney в этом месяце.

Я собираюсь в Disney в этом месяце

Этот код удалит все # символы:

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

… но до этого хэштег (или группа хэштегов) в конце строки нужно удалить.

Как насчет этого?

 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 специальный символ охватывает как диапазоны az и AZ .