Определите местонахождение хэш-тегов

У меня есть последовательность, которая содержит текст, и в нескольких местах будет хэш-тег стиля Твиттера. Я хочу найти их и создать отдельную переменную, где все они отделены местами. Я также хочу преобразовать все хэш-теги в исходной строке в связи. Пример:

$string = "Hello. This is a #hashtag and this is yet another #hashtag. This is #another #example."

после функции:

$string_f = "Hello this is a #hashtag and this is yet another #hashtag. This is another example";

$tags = '#hashtag #another #example';
2
nl ja de
stackoverflow.com/questions/3060601/…
добавлено автор nkorth, источник

2 ответы

Чтобы найти все хэш-теги, используйте regex и preg_match_all (), и сделайте замену preg_replace ():

$regex = '/(#[A-Za-z-]+)/';
preg_match_all( $regex, $string, $matches);
$string_f = preg_replace( $regex, "$1", $string);

Тогда все признаки находятся во множестве в $matches [1] :

$tags_array = $matches[1];

Затем новообращенный это к разделенному пробелом списку с интегрируйтесь () и array_unique ():

$tags = implode( ' ', array_unique( $tags_array));

И вы сделаны. Вы видите от этот демонстрационный пример тот $tags и $string_f :

"#hashtag #another #example"
"Hello. This is a #hashtag and this is yet another #hashtag. This is #another #example."

Для других знаков в хэш-теге (например, цифры), изменяют $regex соответственно.

Edit: However, this can be improved in efficiency if you use preg_replace_callback() and a closure so you only have to execute the regex once, like so:

$tags_array = array();
$string_f = preg_replace_callback( '/(#[A-Za-z-]+)/', function( $match) use( &$tags_array) { 
    $tags_array[] = $match[1];
    return "" . $match[1] . "";
}, $string);
$tags = implode( ' ', array_unique( $tags_array));
6
добавлено
Слова благодарности так!
добавлено автор user1310420, источник

Как насчет небольшого изящного регулярного выражения?

preg_match_all("/#[\w\d]+/", $string, $matches, PREG_SET_ORDER);
unset($matches[0]);
$tags = implode(" ", $matches);
0
добавлено
phpGeeks
phpGeeks
3 620 участник(ов)

Best PHP chat Еще: @dbGeeks - базы данных @phpGeeksJunior - новичкам @moscowProgers - IT Москва @ebanoePhp - весёлый канал о PHP @laravel_pro - Laravel @jobGeeks - вакансии @jsChat - JS Правила: https://t.me/phpGeeks/764859 ДР - 28.03.2016

PHP
PHP
1 309 участник(ов)

Группа про современный PHP. Обсуждаем ООП, TDD, BDD, DDD, SOLID, GRASP и прочие крутые базворды Для ознакомления: https://gist.github.com/mkusher/711bd46f0b62fbae851182e6fb3b1839 Группа PHP для новичков @phpGeeksJunior Вакансии: https://t.me/fordev

PHP — вакансии, поиск работы и аналитика
PHP — вакансии, поиск работы и аналитика
1 251 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению PHP, Laravel, Symfony, Yii и т.д. Здесь всё: full-time, part-time, remote и разовые подработки. См. также: @qa_jobs, @devops_jobs, @javascript_jobs, @nodejs_jobs, @uiux_jobs, @products_jobs

phpGeeksJunior
phpGeeksJunior
980 участник(ов)

Группа для новичков. Не стесняйтесь задавать вопросы по php. Не флудить!!!! Правила и полезные ссылки https://gist.github.com/exileed/a53dd0617b35a705ff44b38c8028e6a5 Бест от пхпгикс https://t.me/best_of_phpgeeks

phpclub.ru
phpclub.ru
872 участник(ов)

Официальный чат phpclub.ru - остерегайтесь подделок #rules Правила группы - уважайте друг друга. Скриншоты -> ссылками. Код -> pastebin.com. Вакансии строго -> https://goo.gl/4bNxym, в чат ссылку. За рекламу и мат - БАН!

Devall | PHP
Devall | PHP
272 участник(ов)

Пристанище для восходящих звёзд разработки, которые перейдут на более адекватные языки. http://combot.org/chat/-1001014863761 Инвайт: j.mp/devallphp