2014-12-14 3 views
0

У меня есть цикл в моем коде, где я хочу, чтобы извлечь только первый, пятый и шестой номер из массива, который выглядит следующим образом:Регулярное выражение в PHP fgetcsv

Array ([0] => 12403;644;20;46;5;285;;;;) 

В настоящее время я пытаюсь использовать регулярные выражения для извлечения этих чисел (в этом случае мне нужно получить 12403, 5 и 285).

$contents = fgetcsv($handle); 
preg_match('/^(\d+);\d+;\d+;\d+;(\d+);(\d+);*.$/', $contents, $match); 
echo "first capture group: " . $match[0] . "\nsecond capture group: " . $match[1] . "\nthird capture group: " . $match[2]; 

Это печатает пустые переменные. Зачем? Не могли бы вы помочь?

+0

Почему бы вам просто не указать ';' как разделитель CSV? Тогда вы можете использовать '$ contents [0]', '$ contents [4]' и т. Д. – Barmar

+0

Ницца, это выглядит лучше :) Спасибо! – jvitasek

ответ

1

$ contents - массив, preg_match нужна строка. Так оно и должно быть:

preg_match('/^(\d+);\d+;\d+;\d+;(\d+);(\d+);*.$/', $contents[0], $match); 

Затем, захват групп начинаются в 1; $match[0] является совпадением для всего регулярного выражения. Так оно и должно быть:

echo "first capture group: " . $match[1] . "\nsecond capture group: " . $match[2] . "\nthird capture group: " . $match[3]; 

Но более простым решением было бы использовать правильный разделитель при вызове fgetcsv(), так что он разделит линию для вас - это весь смысл использования fgetcsv() вместо fgets().

$contents = fgetcsv($handle, ';'); 
echo "first capture group: " . $contents[0] . "\nsecond capture group: " . $contents[4] . "\nthird capture group: " . $contents[5]; 
Смежные вопросы