распознать строку по регулярному вырожению

NiGHT

Новичок
распознать строку по регулярному вырожению

Есть строка (лог), я написал регулярное вырожение, которое ей соответствует, теперь надо распознать эту строку т.е. определить ту часть вырожения, которая может меняться. Как такое сделать ? кончено можно взять и разбить действие на несколько отдельных (сначала найти до первого пробела, потом от [ до ] потом от " до " и потом разделить по пробелам) разбиений, но это неоправданно много кода.

Пример:
127.0.0.1 - [ery 456] "46 fdhfg" ery 554
[\S]*\s-\s\[(\S|\s)*\]\s\"(\S|\s)*\"\s[\S]*\s[\S]*

а надо что бы вернулся массив из 5 элементов:
127.0.0.1
ery 456
46 fdhfg
ery
554
 

zerkms

TDD infected
Команда форума
()
+ последний аргумент в preg_match/preg_match_all
 

NiGHT

Новичок
Спасибо, я о такой мелочи не догадался.

PHP:
   $str = '127.0.0.1 - [er    y456] "46f  dhfg" ery 554';

   $pattern = '/([\S]*)\s-\s(\[(\S|\s)*\])\s\"((\S|\s)*)\"\s([\S]*)\s([\S]*)/'; 

   preg_match_all($pattern, $str, $matches);

   print_r($matches);
Результат:
Array
(
[0] => Array
(
[0] => 127.0.0.1 - [er y456] "46f dhfg" ery 554
)

[1] => Array
(
[0] => 127.0.0.1
)

[2] => Array
(
[0] => [er y456]
)

[3] => Array
(
[0] => 6
)

[4] => Array
(
[0] => 46f dhfg
)

[5] => Array
(
[0] => g
)

[6] => Array
(
[0] => ery
)

[7] => Array
(
[0] => 554
)
)
подскажите откуда взялся 0ой массив, а так же 3ий и 5ый. Вернее, где я накосячил с регулярным выражением, так что он стал повторяться.
 

Вурдалак

Продвинутый новичок
В 0-ом элементе массива содержится найдённая подстрока, подходящая под весь шаблон. Позволю несколько вольностей, но, думаю, правильнее будет так:
PHP:
$patten = '/^(\S+) - \[(.*?)\] "(.*?)" (\S*) (\S*)\\r?$/m';
P.S. А в [ ... ] и " ... " предполагается какое-то экранирование символов [, ], "?
 

NiGHT

Новичок
??? что имеется ввиду под словом экранирование ? (чего от чего). это служебные символы они нужны для разметки и проверки строки.

это выражение действительно лучше и артефактов как в моем нет. только понять не могу почему.

+ ну и моих знаний пока маловато что бы оценить красоту
 
Сверху