Мне нужно удалить символ # из хэштегов только в том случае, если хэштег находится где угодно, но в конце строки. Примеры:
Я собираюсь в #Disney в этом месяце! #WDW
- Сохранение файла .php и сохранение включений тоже (возможно)
- Удаление текста между двумя строками в php с использованием preg_replace
- регулярные выражения - сопоставление всех якорей с необязательными атрибутами
- Удалить повторяющийся символ
- regexp с русским языком
Я собираюсь в #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
.