Я предполагаю, что это связано с регулярным выражением, но это искусство, все из которого оно принадлежит, и мне нужна помощь.
Когда мы показываем историю, мы сохраняем весь текст в переменном – скажем, $ story.
Я бы хотел сделать str_replace (я думаю, что это то, что мне нужно), который говорит что-то вроде этого: «Если текст содержит @something, то превратите его в ссылку типа <a href="http://www.twitter.com/something">@something</a>
– но делайте это только в том случае, если ничего не осталось перед символом @" (чтобы исключить адреса электронной почты)
Кроме того, нам нужно остановить «что-то», если после него будет пробел или пунктуация. так что @что-то. не превращается в <a href="http://www.twitter.com/something.">@something.</a>
Любые предложения о том, как сделать эту работу?
$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-тега».