Регулярные выражения и массив

rooot

Новичок
Регулярные выражения и массив

1) Помогите составить выражение.

PHP:
$mess = "to [vlad] to [alex] to [nick] to [mad] messeges for all pepole to [bill] to [fox] messeges for all pepole";
preg_match_all("/^to\s{1}\[{1}[a-z]{3,4}\]{1}\s{1}|to\s{1}\[{1}[a-z]{3,4}\]{1}/", $mess, $matches);
print_r($matches);
[\PHP]

Выводит:
Array ( [0] => Array ( [0] => to [vlad] [1] => to [alex] [2] => to [nick] [3] => to [mad] [4] => to [bill] [5] => to [fox] ) ) 

а должно:
Array ( [0] => Array ( [0] => to [vlad] [1] => to [alex] [2] => to [nick] [3] => to [mad] [4] ) ) 
2) Как данные в массиве присвоить к примеру $data.
т.е. не использовать операторы типа while и т.д.
а что то вроде
[PHP]
$data=array($matches);
Спасибо.
 

Фанат

oncle terrible
Команда форума
1) ты забыл объяснить, чего тебе надо.
2) зачем тебе массив $data, если у тебя есть $matches?
 

rooot

Новичок
1) на выходе должно получится
Array ( [0] => Array ( [0] => to [vlad] [1] => to [alex] [2] => to [nick] [3] => to [mad] [4] ) )
т.е. to [bill] to [fox] отсекаются при условии появления данных не входящих в preg_match_all.
Пример имеем текст $mess = "to [vlad] to [alex] to [nick] to [mad] messeges for all pepole to [bill] to [fox] messeges for all pepole";
после обработки нужно получить $goodmess = "to [vlad] to [alex] to [nick] to [mad]";

2) Ну это не принципиально пусть будет $matches (это я всегда создаю новые переменные чтобы не запутатся, рановато еще слету шкодить). Важно то что манул не помог первый раз за практику, не нашел я такого оператора который сходу присвоит весь массив какой либо переменной, не прибегая к операторам типа while.
 

Фанат

oncle terrible
Команда форума
sakon
ты уверен, что ему нужна строка?

-~{}~ 08.01.06 15:34:

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

Фанат

oncle terrible
Команда форума
при условии появления данных не входящих в preg_match_all.
что-то мне о таких условиях ничего неизвестно.
ещё раз (последний) попрошу словами объяснить - что тебе нужно сделать.
 

rooot

Новичок
>>sakon
совет не подходит. На выходе array.
>>Фанат
дано: to [vlad] to [alex] to [nick] to [mad] messeges for all pepole to [bill] to [fox] messeges for all pepole
нужно: to [vlad] to [alex] to [nick] to [mad]
мой скрипт:
$mess = "to [vlad] to [alex] to [nick] to [mad] messeges for all pepole to [bill] to [fox] messeges for all pepole";
preg_match_all("/^to\s{1}\[{1}[a-z]{3,4}\]{1}\s{1}|to\s{1}\[{1}[a-z]{3,4}\]{1}/", $mess, $matches);
выдает не то что нужно, а именно все вхождения схожими с шаблоном: to\s{1}\[{1}[a-z]{3,4}\]{1}\s{1}
Более подробно: Есть в чате Фанат, rooot, vasia и sakon. sakon отправляет тебе и vasia месагу: to [Фанат] to [vasia]Вот тебе логин того перса который тебя уже достал свими вопросами to [rooot]
Нужно отследить всего два логина to [Фанат] to [vasia] (в данном случае, на самом деле их может быть больше), а вот логин to [rooot] который идет после текста его надо считать как месага.
:)
 

Фанат

oncle terrible
Команда форума
скажи, а сформулировать вопрос в виде "мне нужны все вхождения вида to [nick], идушие только в начале строки" тебе совсем не под силу?
 

rooot

Новичок
>>Фанат
в первом топе вроде так и сказал.
и всетаки на счет первого и второво вопроса???
 

sakon

П..и.н..ок
М...да.
Фанат
насчет implode был неправ....

rooot
А почему бы тебе не получить сразу все нужные тебе "to [...]" в одну ячейку массива?
 

Фанат

oncle terrible
Команда форума
rooot
ничего ты там не сказал. и в этом твоя главная проблема.
не в незнании пхп или регулярных. а в неумении самому себе объяснить, чего ты хочешь.
ты не можешь сформулировать задачу. а без этого ты её никогда не решишь.
 

rooot

Новичок
>> Фанат
согласен, ты прав.
>>sakon
побежал пробовать.
Господа подскажите где я напутал?
"/^to\s{1}\[{1}[a-z]{3,4}\]{1}\s{1}|to\s{1}\[{1}[a-z]{3,4}\]{1}/"
 

sakon

П..и.н..ок
Чума....
PHP:
preg_match('/(to\s+\[[A-Za-z]+\]\s+)+/s',$mess, $arr);
echo $arr[0];
научись наконец правильно формулировать свои задачи.
 

Фанат

oncle terrible
Команда форума
sakon
ты забыл самое главное в паттерне. он ему опять билла с фоксом найдёт.

rooot
слушай, выкини ты ВСЕ эти кучерявые скобки из паттерна. в глазах рябит. откуда ты их вообще выкопал?
почему бы тебе не потренироваться на более простых примерах сначала?
Чтобы паттерны не выглядели хотя бы так чудовищно
 

rooot

Новичок
>>Фанат
"/to\s\[[a-z]+\]\s|to\s\[[a-z]+\]\s/"
вот без кучерявых скобок

-~{}~ 08.01.06 16:43:

а забыл он всего обозначить начало и конец ^$
 

rooot

Новичок
'/^(to\s+\[[A-Za-z]+\]\s+)+/s'
вот как бы рабочая версия только вот почему то еще и последнего дублирует в arr[1]
Array ( [0] => Array ( [0] => to [vlad] to [alex] to [nick] to [mad] ) [1] => Array ( [0] => to [mad] ) )

-~{}~ 08.01.06 16:51:

>>Фанат
про конец ))) , это я к слову. если есть ночало то и должен быть конец.

-~{}~ 08.01.06 16:51:

начало сори

-~{}~ 08.01.06 17:00:

>>sakon
Чума....
preg_match('/(to\s+\[[A-Za-z]+\]\s+)+/s',$mess, $arr);
echo $arr[0];
научись наконец правильно формулировать свои задачи.

опять ты меня не понял (((
а если их arr[100]?
В самом начале я говорил не используя
$a=count($matches, COUNT_RECURSIVE);
while {
......
}

Как прочесть данные масива?

-~{}~ 08.01.06 17:01:

не не прочесть print_r($arr)
а присвоить все данные массива какой нибудь переменной?
 

sakon

П..и.н..ок
Нифига не понял.....
Ты же получил нужные тебе записи в оду ячейку.
При чем здесь arr[100]?
 

rooot

Новичок
>>sakon
в этом примере да, я про часный случай.

-~{}~ 08.01.06 17:09:

частный сори
 
Сверху