регулярное выражение. выбрать неск данных из списка

eldalomeo

Новичок
доброе время суток.
прочитал тут статейки "Регулярные выражения,ЧастьI" и "Регулярные выражения,ЧастьII" вроде всё понятно. собрал регулярку правильно (надеюсь). но как получить то что я ищу не пойму((
прошу помощи.
итак, есть список:
Ник1, лидер
656 и 11.8млрд за 3 мсц. пребывания
Ник2, представитель
550 и 11.8млрд за 3 мсц. пребывания
Ник3, новичок
389 и 1.0млн за 37 д. пребывания


мне надо вырезать от сюда "ники" и, ну для начала, первые цифры. как то так:
Ник1 - 656
Ник2 - 550
Ник3 - 389


вот какакую я собрал регулярку:

PHP:
preg_match_all("~^(.*),\s(?:лидер|представитель|участник|новичок)(\d+)\sи\s([.\d\w])\sза\s\d\s(?:д.|мсц.)\sпребывания$~", $msg, $matches);
print_r($matches);
то что в скобках то мне надо (.*) и (\d+) они попадают как бы в кармашек \1 и \2. вот куда и как эти кармашки записать? спс
 
Последнее редактирование модератором:

AnrDaemon

Продвинутый новичок
Ваше регулярное выражение "новичок)(\d+)" не соответвует приведённому образцу текста.
 

eldalomeo

Новичок
пробовал между ними ставить и \n и \s всё равно не работает. print_r($msg) выдаёт всё одной длинной строкой
 

С.

Продвинутый новичок
Да кто вам сказал, что одной регуляркой можно решить любую задачу?
Открой для себя explode().
 

eldalomeo

Новичок
я сначала в explode сделал. но боюсь что где то что то не так скопируется и будет беда.
вот мой первый топорный вариант, собранный из кусочков:
Код:
function multiexplode ($delimiters,$string) {
 
    $ready = str_replace($delimiters, $delimiters[0], $string);
    $launch = explode($delimiters[0], $ready);
    return  $launch;
}


$exploded = multiexplode(array(","," за "," и ","пребывания"," лидер "," представитель "," участник "," новичок "),$msg);

//print_r($exploded);
for ( $i=0; $i<count($exploded); $i+=5)
{
echo $exploded[$i]." - ".$exploded[$i+2];
echo "</br>";
}
поэтому хотел обезопасится, вдруг регуляркой лучше будет
 

С.

Продвинутый новичок
боюсь что где то что то не так скопируется и будет беда.
поэтому хотел обезопасится, вдруг регуляркой лучше будет
А то, что где-то что-то не так срегулярится ты не боялся? Странная логика.

Не менне забавный способ делить текст. Но если работает, то и ладно. Хотя более простой
PHP:
$exploded = multiexplode(array(" ", "\n"),$msg);
дал бы абсолютно равноценный результат
 

Hello

Новичок
eldalomeo,
Код:
#(.+),.+\n(\d+)#
PHP:
[1] => Array ( [0] => Ник1 [1] => Ник2 [2] => Ник3 )
[2] => Array ( [0] => 656 [1] => 550 [2] => 389 )
 

eldalomeo

Новичок
PHP:
$exploded = multiexplode(array(" ", "\n"),$msg);
дал бы абсолютно равноценный результат
не подходит этот вариант тем, что ники тоже состоят из двух слов и боле. пробелом разделяется. но спс.


eldalomeo,
Код:
#(.+),.+\n(\d+)#
PHP:
[1] => Array ( [0] => Ник1 [1] => Ник2 [2] => Ник3 )
[2] => Array ( [0] => 656 [1] => 550 [2] => 389 )
а вот с этим реально спасибо. всё сработало идеально. не думал что так по минимуму можно реалиизовать. огромное спс
 
Сверху