Помоги составить регулярное выражение

bigton
На сайте с 17.08.2009
Offline
43
477

Есть некоторое сообщение, нужно выбрать логины (как в twitter)


$msg = '@login1 @login2 @login3@login4 текст текст текст @login5';
preg_match_all('/@([a-z0-9\-\_]+)/iu', $msg, $m);

Правильным результатом будет если в $m будут login1,2,5, но у меня не получается составить такое выражение... подскажите пожалуйста

siv1987
На сайте с 02.04.2009
Offline
427
#1

Какое такое и что значит не получается? Вон у вас в примере все получается

u - utf-8


preg_match_all('/@([a-z0-9\-\_]+)/iu', $msg, $m);
gormarket
На сайте с 29.12.2010
Offline
47
#2

$msg = '@login1 @login2 @login3@login4 текст текст текст @login5';

preg_match_all('/(?:^| )(@[a-z0-9_-]+)(?= |$)/i', $msg, $m);

print '<pre>';

print_r($m[1]);

print '</pre>';

результат:

Array

(

[0] => @login1

[1] => @login2

[2] => @login5

)

Товары и цены в магазинах Вашего города: Городской рынок (http://gormarket.ru/)
bigton
На сайте с 17.08.2009
Offline
43
#3
gormarket:
$msg = '@login1 @login2 @login3@login4 текст текст текст @login5';
preg_match_all('/(?:^| )(@[a-z0-9_-]+)(?= |$)/i', $msg, $m);
print '<pre>';
print_r($m[1]);
print '</pre>';

результат:


Array
(
[0] => @login1
[1] => @login2
[2] => @login5
)

Спасибо большое, работает!

Итоговый вариант выражения чтобы выделить из сообщения имя пользователя:

preg_match_all('/(?:^|\s)@([a-z0-9_-]+)(?=\s|$)/iu', $msg, $m);

Не знал про (?=шаблон)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий