preg replace_callback упоминания и хэш-теги на почте

Позволяет говорят, что у меня есть текст,

$text = '@stackguy @flowguy I need to learn more advanced PHP #ilovephp';

Я хочу заменить обоих @stackguyand @flowguy с теми 2 тегами привязки соответственно. Это должно также работать на любое количество в текстовой строке.

@stackguy
@flowguy

Я также хочу заменить #ilovephp

#ilovephp

Это должно также работать на много #. Я предполагаю, что это будет что-то как

preg_replace_callback('regex',
            create_function('$matches', '
                switch ($matches[1]) {
                    case "@":
                        return "" . $matches[2] . "";
                    case "#":
                        return "" . $matches[2] . "";
                }
        '), $var);

На что regex собирается быть похожим? Моя функция собирается соответствовать всем, что необходимо, или я должен добавить цикл foreach? Спасибо.

0
nl ja de
Sooo... what' s вопрос?
добавлено автор Mr. Llama, источник
Почему вы "предполагающий it' ll быть чем-то как" безотносительно? Попробуйте его и затем если это doesn' t работа, тогда у нас есть что-то, чтобы уйти. You' ve приходят thisclose к фактическому написанию некоторого кода и испытанию это.
добавлено автор Andy Lester, источник
Самая важная часть func (regex) является чем-то, о чем у меня нет подсказки.
добавлено автор Saff, источник
Просто отредактированный это.
добавлено автор Saff, источник

3 ответы

If you just wan't to match text preceded by @ or # use this: /([@#])(\S+)/

View this demo: http://regex101.com/r/eP7eU0

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

1
добавлено
Мог бы хотеть исправить это, чтобы / ([#]) (\S +)/ . Шафран должен соответствовать символу, чтобы определить который тег привязки обернуть его в.
добавлено автор Mr. Llama, источник
@GigaWatt: Хорошая выгода, I' ll редактируют это.
добавлено автор Firas Dib, источник
@SaffronHarris: preg_replace() петли автоматически, вы don' t должны сделать это самостоятельно.
добавлено автор Firas Dib, источник
@SaffronHarris: Это будет соответствовать даже если there' s http://
добавлено автор Firas Dib, источник
@SaffronHarris: Я don' t знают то, что вы имеете в виду, когда вы говорите, добавляет больше вещей. Создайте новый вопрос в установленный срок:). Я рекомендую regex101.com/quiz. Можно также забрать старомодную книгу, что-то как Освоение с Регулярными выражениями.
добавлено автор Firas Dib, источник
@SaffronHarris нет, это won' t затрагивают нормальный случай. \S указывает "на что-либо кроме пространства любого типа" поэтому если you' ре, уверенное, вы хотите соответствовать только, чтобы сказать алфавитно-цифровые символы тогда можно использовать \w вместо \S или [^\\s#] . Обратите внимание, что \w (словесный символ) соответствует a-z, A-Z, 0-9, и подчеркните (_). Можно всегда ограничивать его вниз группой требуемого символа, как [a-zA-Z] или [зона действий Z0 9] и т.д. В так или иначе don' t забывают знак "плюс", чтобы поймать как можно больше знаков, как в Lindrian' s предложение.
добавлено автор inhan, источник
@SaffronHarris, которые я рекомендую [^\\s#] вместо \S для возможных случаев многократного последовательного # или знаки как ##sometag , # кто-то , @@кто-то и т.д.
добавлено автор inhan, источник
О, хорошо, что из того, когда последовательность содержит http://, это shouldn' t затрагивают его правильный?
добавлено автор Saff, источник
You' большое ре. Большое спасибо:)
добавлено автор Saff, источник
Также вы знаете, как избежать случаев как [в] someone' s или [в] ком-то: или @someone., это shouldn' t читают ': и.? Спасибо
добавлено автор Saff, источник
Большое спасибо @inhan, это doesn' t затрагивают нормальное право случая?
добавлено автор Saff, источник
Спасибо за связь. Я просто имел в виду, хотел ли я также найти и заменить + и http' s в тексте regex был бы похож на это / ([# + https?://]) (\S +)/
добавлено автор Saff, источник
Работавший отлично. Еще раз спасибо @lindrain. Как я добавляю больше вещей к regex, например, +, * и http? Также какой-либо хороший regex tuturial вы мог рекомендовать?
добавлено автор Saff, источник
Спасибо за вашу помощь @lindrian, i' m осуществление его теперь.
добавлено автор Saff, источник
Благодарите youuu @lindrian:)
добавлено автор Saff, источник
@lindrian: что вы подразумеваете под соответствием тому же самому, когда в помечает? вы имеете в виду, есть ли у меня

тот же самый текст

, это произвело бы тот же самый результат?
добавлено автор Saff, источник
Спасибо @lindrian и Гигаватт: функция заменяет все, или мне нужна петля?
добавлено автор Saff, источник

preg_replace() and preg_replace_callback() both, by default, look fили all the possible matches so you don't need a loop.

Рассмотрение этих ценностей не было уже обернуто якорями, я буду использовать также

preg_replace('[email protected]([^\s#@]+)~','$0',
    preg_replace('~#([^\s#@]+)~','$0',$text)
);

или

preg_replace_callback('~([#@])([^\s#@]+)~',create_function('$m',
    '$dir = $m[1] == "#" ? "search" : "url";' .
    'return "$m[0]";'
),$text);
1
добавлено

После этого обучающая программа при замене хэш-тегов и упоминаний, preg_replace() достаточно хорош.

$patterns = array('/#(\w+)/', '/@(\w+)/');
$replacements = array('#$1', 
                '@$1');

$html = preg_replace($patterns, $replacements, $text);
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