Mike_Ro
@Mike_Ro
Не упусти возможность, упустить возможность

Как правильно обработать регуляркой считанные данные из файла?

Приветствую!

Пытаюсь регуляркой вытащить последние цифры каждой строки из файла. В итоге получаю цифры лишь последней строки, а обработка всех предыдущих срок возвращает пустой массив. В чем проблема?

file.txt
охрана труда	167 589
пожарная охрана	75 967
организация охраны	21 617

php
$file = fopen("./file.txt", "r");

while(!feof($file))
{
  $str = fgets($file);
  preg_match("/([0-9]+)?.([0-9]+)$/i", $str, $matches);
  print_r($matches);
}

fclose($file);

результат
Array
(
)
Array
(
)
Array
(
    [0] => 21 617
    [1] => 21
    [2] => 617
)
  • Вопрос задан
  • 89 просмотров
Решения вопроса 1
maddog670
@maddog670
<?php

$file = fopen("./file.txt", "r");

$arr = [];

while(!feof($file))
{
  $buffer = fgets($file);

  preg_match('/\d+\s?\d+/', $buffer, $match);

  $arr[] = $match;
}

fclose($file);

print_r($arr);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Nc_Soft
У меня ваш пример работает корректно на маке, но возможно в винде не будет. Попробуйте поменять регулярку на такую
<?php
$file = fopen("./file.txt", "r");

while(!feof($file))
{
$str = fgets($file);
$matches = [];
preg_match("/\d+\s?\d+/", $str, $matches);
print_r($matches);
}

fclose($file);

upd. Да, точно это формат конца строки
у вас конец строки в win формате, фактически все строки кроме последней выглядят так
охрана труда 167 589\r\n
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы