Intereting Posts

Php, чтобы заменить @username ссылкой на аккаунт Twitter

Я предполагаю, что это связано с регулярным выражением, но это искусство, все из которого оно принадлежит, и мне нужна помощь.

Когда мы показываем историю, мы сохраняем весь текст в переменном – скажем, $ story.

Я бы хотел сделать str_replace (я думаю, что это то, что мне нужно), который говорит что-то вроде этого: «Если текст содержит @something, то превратите его в ссылку типа <a href="http://www.twitter.com/something">@something</a> – но делайте это только в том случае, если ничего не осталось перед символом @" (чтобы исключить адреса электронной почты)

Кроме того, нам нужно остановить «что-то», если после него будет пробел или пунктуация. так что @что-то. не превращается в <a href="http://www.twitter.com/something.">@something.</a>

Любые предложения о том, как сделать эту работу?

Solutions Collecting From Web of "Php, чтобы заменить @username ссылкой на аккаунт Twitter"

 $input = preg_replace('/(^|\s)@([a-z0-9_]+)/i', '$1<a href="http://www.twitter.com/$2">@$2</a>', $input); 

Видеть это

Он соответствует значению @ которому предшествуют пробелы или ничего (когда оно находится в начале).

Он также может быть закорочен с использованием положительного lookbehind как:

 $input = preg_replace('/(?<=^|\s)@([a-z0-9_]+)/i', '<a href="http://www.twitter.com/$1">@$1</a>', $input); 

Которое соответствует только имени твиттера, но только если перед этим есть пробел или ничего.

Положительный lookbehind мог сделать трюк:

 preg_replace('/(?<=\s)@(.*?)/', '<a href="....com/$1">@$1</a>') 

уходя с головы. «Если есть @, которому предшествует что-то, что является пробелом, тогда возьмите все, что следует за @ и сделайте обертку html-тега».