В моем коде есть цикл, в котором я хочу извлечь только первое, пятое и шестое число из массива, который выглядит следующим образом:
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];
Это печатает пустые переменные. Зачем? Можете ли вы помочь?
$ content — это массив, 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];
Других решений пока нет …