Задать вопрос
Mike_Ro
@Mike_Ro
Python, JS, WordPress, SEO, Bots, Adversting

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

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

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

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
)
  • Вопрос задан
  • 94 просмотра
Подписаться 1 Простой 2 комментария
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 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
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽