Я пытаюсь сделать preg_match
для массива строк, используя цикл for, но он возвращает только отфильтрованный результат для последнего элемента в массиве.
Вот мой код:
<!-- language: lang-php -->
$file = "smalllog";
$handle = fopen($file, 'rb');
if ($handle) {
$lines = array();
$count = 0;
while ( ($line = fgets($handle)) !== false) {
if(strpbrk($line,"/tracking/p2x/")) {
$lines[$count]['string'] = $line;
$count++;
}
}
fclose($handle);
}
for($i=0;$i<count($lines);$i++) {
$matches = array();
preg_match("/^(\S+) (\S+) (\S+) \[([^:]+):(\d+:\d+:\d+) ([^\]]+)\] \"(\S+) (.*?) (\S+)\" (\S+) (\S+) (\".*?\") (\".*?\")$/", $lines[$i]['string'], $matches);
print_r($matches);
print '<br /><br />';
}
Который должен отображать список взорвавшихся массивов. Однако то, что я на самом деле вижу, выглядит примерно так:
Array()
Array()
Array ( !--correctly exploded data in here--! )
Я прошу прощения, если это глупый вопрос - мои навыки PHP невелики.
РЕДАКТИРОВАТЬ: Вот изменение, которое, похоже, исправило проблему:
Изменение регулярного выражения с:
"/^(\S+) (\S+) (\S+) \[([^:]+):(\d+:\d+:\d+) ([^\]]+)\] \"(\S+) (.*?) (\S+)\" (\S+) (\S+) (\".*?\") (\".*?\")$/"
до:
"/^(\S+) (\S+) (\S+) \[([^:]+):(\d+:\d+:\d+) ([^\]]+)\] \"(\S+) (.*?) (\S+)\" (\S+) (\S+) (\".*?\") (\".*?\")/"
(выпал $
)