Как я могу разумно удалить все конечные хэштеги из заголовка Instagram?

Многие посты в Instagram заканчиваются множеством хэштегов, например:

"This is one of the amazing Mountains you can find in the National Forest Park in #Zhangjiajie #Chinawhich is where James Cameron drew his inspiration for the flying mountains in #Avatar..

Credit: @phototravelnomads
#pictoura #gydr
#destinationearth #earthpix #ourlonelyplanet#wonderful_earthLife #timeoutsociety#fantastic_earthpics #liveoutdoors #igglobalclub#awesomeearth #mist_vision #earthdeluxe
# #worldbestgram #mthrworld #fantastic_earth#famouscaptures #destination_wow #dreamlifepix#wonderful_places #igworldclub #ig_global_life
#natureaddict #beautifuldestinations #traveler #guider#locals"

Я пытаюсь обработать подписи, чтобы удалить коллекцию хэштегов в конце, оставляя остальные нетронутыми. Каков будет хороший подход к этому? Я уверен, что смогу найти способ грубой силы, но я надеюсь получить некоторые мысли об элегантном решении. Не должен быть реальным кодом. 🙂

Редактировать за комментарий Берна: Ожидаемый результат будет:

"This is one of the amazing Mountains you can find in the National Forest Park in #Zhangjiajie #Chinawhich is where James Cameron drew his inspiration for the flying mountains in #Avatar..

Credit: @phototravelnomads"

Отредактируйте согласно ответу Алана Мура: Это работает довольно хорошо, но не в каждой ситуации. Например, если входной текст будет:

"This is one of the amazing Mountains you can find in the National Forest Park in #Zhangjiajie #Chinawhich is where James Cameron drew his inspiration for the flying mountains in #Avatar"

… это будет отрезано от «#Zhangjiajie» на.

Я думаю, что, возможно, требуется немного больше логики, возможно, разбить строку на массив; проверка, заканчивается ли он хэштегами; если так, то сколько; если больше X (4?), отрежьте его от первого в последней полной серии.

0

Решение

Похоже, это сделает это:

$result = preg_replace('/#[#\w\s]*\z/', '', $subject);

DEMO

Регулярное выражение соответствует хешу (#), за которым следует ноль или более символов, составляющих хэштеги, плюс пробел, разделяющий их ([#\w\s]*), за которым следует конец строки (\z).

\w эквивалентно [A-Za-z0-9_], Если в хэштегах разрешены другие символы или не разрешены цифры, дайте мне знать, и я обновлю регулярное выражение.


ОБНОВЛЕНИЕ: Если вы хотите удалить все робо-теги, оставляя легитимные, вероятно, нет надежного способа — конечно, не только с помощью регулярных выражений. Тем не менее, это удалит все, кроме первого линия из хэштегов:

$result = preg_replace('/^(#[#\w\h]+\R)#[#\w\s]*\z/m', '$1', $subject);

DEMO

\h соответствует только горизонтальному пробелу (пробел, табуляция, nbsp …) и \R соответствует любому разделителю строк (\r\n или любой отдельный вертикальный пробел).

Что касается хештэгоподобных вещей в тексте, это не коснется их, потому что они привязаны к концу текста. Якорь начала строки (^ в многострочном режиме) на самом деле не требуется, но это может помочь будущим читателям регулярного выражения (включая вас) понять, что он делает. Конечно, комментарии помогут еще больше. 😉

1

Другие решения

Если я правильно понимаю, должно работать следующее:

$hashTag="pictoura #gydr

destinationearth #earthpix #ourlonelyplanet#wonderful_earthLife #timeoutsociety#fantastic_earthpics #liveoutdoors #igglobalclub#awesomeearth #mist_vision #earthdeluxe

#worldbestgram #mthrworld #fantastic_earth#famouscaptures #destination_wow #dreamlifepix#wonderful_places #igworldclub #ig_global_life

natureaddict #beautifuldestinations #traveler #guider#locals";

echo preg_replace('/(#.*\s*)/','',$hashTag);

Что выводит:

pictoura destinationearth natureaddict

Удачи!!

0

По вопросам рекламы [email protected]