1. PHP / Говнокод #11598

    +56

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    public function analyse($args) {
        $i = -1;
        $length = 0;
        $pictures = array();
    
        foreach ($args as $string) {
            switch (trim($string)) {
                case '{':
                    $i++;
                    $pictures[$i] = new element();
                    $length++;
                    break;
                case '}':
                   break;
               default:
                    if (preg_match('/^ {0,}([A-Za-z]{1,})\s{0,}:\s{0,}\'([\S\s]{0,})\';/iu', $string, $matches)) {
                        $pictures[$i]->setProperty($matches[1], $matches[2]);
                    }
                    break;
            }
        }
        return new container($pictures, $length);
    }

    Рукопашный парсинг Json-подобного синтаксиса.

    Запостил: vistefan, 15 Августа 2012

    Комментарии (8) RSS

    • Вопрос: зачем нужен JSON-подобный язык, если сам JSON уж проще некуда?
      Ответить
      • Ответ: ибо ваистену!
        Ответить
      • иногда нужен, но явно не здесь
        {0,} вместо звёздочки и {1,} вместо плюсика умиляют
        Ответить
        • Я понимаю, если расширить надо (и то спорно), а тут какое-то сужение с извращением.
          Ответить
          • А меня порадовало [\S\s] вместо . :) Короче регулярка сокращается до такой:
            /^ *([a-z]+)\s*:\s*\'(.*)\';/iu
            Ответить
            • Так ведь . не матчит переводы строк, не?
              Ответить
              • Не матчит. А должна, в кавычках-то? Ну хорошо, если надо - добавляем модифаер /.../ius
                Ответить
    • ни один парсер не обходится без регулярок
      Ответить

    Добавить комментарий