Одно регулярное выражение, которое можно было бы использовать (бессовестно украденное из библиотеки @ везде javascript , упомянутой в другом ответе), было бы:
\B\@([a-zA-Z0-9_]{1,20})
Это ищет не-слово-границу (для предотвращения совпадения a@b
[т.е. сообщений электронной почты]), за которой следует @
, затем от одного до 20 (включительно) символов в этом классе символов.Конечно, маршрут что угодно, кроме пробела , как и в других ответах;это очень сильно зависит от того, какие значения (dis) должны быть разрешены в части метки @label
.
Чтобы использовать выделенное регулярное выражение в PHP, можно использовать что-то вроде следующего для замены строки $subject
.
$subject = 'Hello, @moustafa how are you today?';
echo preg_replace('/\B\@([a-zA-Z0-9_]{1,20})/', '<a href="user/$1">$0</a>', $subject);
Выше приведено что-то вроде:
Hello, <a href="user/moustafa">@moustafa</a> how are you today?