За последние 24 часа нас посетили 19957 программистов и 1001 робот. Сейчас ищут 308 программистов ...

Как правильно написать foreach для работы с регулярным выражением?

Тема в разделе "PHP для новичков", создана пользователем IlayVanse, 9 ноя 2020.

  1. IlayVanse

    IlayVanse Новичок

    С нами с:
    25 авг 2020
    Сообщения:
    22
    Симпатии:
    0
    Добрый вечер. У меня есть файл (file.txt). В этом файле хранятся данные, вида:
    Код (Text):
    1. Group
    2. key :  value
    3. key2 : value
    4.  
    5. GroupTwo
    6. key :  value
    7. key2 : value
    8. и.т.д.
    Чтобы разобрать эти данные, я использую регулярное выражение ([a-z]\n(^Data.*?)\n(^Class.+)), но у меня проблема, как правильно написать цикл foreach, чтобы вывести группы в массив?
    Пытался так:
    PHP:
    1.          foreach ($regex as $list) {
    2.                $arr = $list;
    3.          }            
    Помогите, пожалуйста.
     
    #1 IlayVanse, 9 ноя 2020
    Последнее редактирование: 9 ноя 2020
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.749
    Симпатии:
    1.321
    Адрес:
    Лень
    этот regex относится к данному тексту ? что-то не вижу дата и класса.
    --- Добавлено ---
    итак, 1 минута и в голове есть полный код. Но интересно в каком месте кода твоего, появилась проблема ?
     
  3. IlayVanse

    IlayVanse Новичок

    С нами с:
    25 авг 2020
    Сообщения:
    22
    Симпатии:
    0
    $arr выводит "ничего", а точнее NULL. Если пробовать без цикла, то выводится все в один сплошной массив.
     
  4. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.749
    Симпатии:
    1.321
    Адрес:
    Лень
    почему там null ? сам цикл работает ?
     
  5. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Регулярные выражения нужно использовать только по большой необходимости.
    PHP:
    1. <?php
    2. $params = file('file.txt', FILE_SKIP_EMPTY_LINES);
    3.  
    4. $arr = array();
    5. $key = 0;
    6.  
    7. foreach($params as $line)
    8. {
    9. if(strpos($line, ':') === false)
    10.   {
    11.    $key = trim($line);
    12.   }
    13.   else
    14.   {
    15.   list($k, $v) = explode(':', $line);
    16.   $arr[$key][trim($k)] = trim($v);
    17.   }
    18. }
    19.  
    20. echo '<pre>';
    21. print_r($arr);
    22. ?>
     
    #5 Drunkenmunky, 9 ноя 2020
    Последнее редактирование: 9 ноя 2020
  6. IlayVanse

    IlayVanse Новичок

    С нами с:
    25 авг 2020
    Сообщения:
    22
    Симпатии:
    0
    Спасибо!