ФорумПрограммированиеPHP для идиотов → Парсинг вложенных тегов

Парсинг вложенных тегов

  • VaseninM

    Сообщения: 2417 Репутация: N Группа: Адекваты

    Spritz 16 апреля 2010 г. 13:21

    Поясню что мне надо на простом примере. Я практикуюсь по ооп и пишу велосипеды. Вот шаблонизатор решил написать. Регулярку никак не могу придумать. Пример упрощаю.
    [array name]
       текст
    [/array]

    обрабатываем
    /\[array ([-a-z0-9_]+)\](.*?)\[\/array\]/i

    А теперь нужно обработать вложенный массив

    [array name1]
      [array name2]
          текст
       [/array]
    [/array]

    а вот к нему никак не придумаю регулярку. Кто нибудь знает решение?
  • Nyaah

    Сообщения: 574 Репутация: N Группа: Джедаи

    Spritz 16 апреля 2010 г. 14:19, спустя 57 минут 47 секунд

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

    п.с. лучший шаблонизатор это php! =)
    Work, buy, consume, die
  • VaseninM

    Сообщения: 2417 Репутация: N Группа: Адекваты

    Spritz 16 апреля 2010 г. 14:31, спустя 12 минут 21 секунду

    Naaayh, ну я тако дика простенький шаблонизатор пишу. Чтобы дизайнеру моск не ебать со всякими смарти и тем более лучшим пхп)
    Судя по всему лучшее для меня решение на данный момент -
    [array name]
    текст
    [/array name]

    Еще мысль была сделать зацикленно. Что то типа ищем [array name]что то[/array], где в "что то" не содержится закрывающего или открывающего аррея. Так мы соберем самые вложенные теги. Потом прогнать еще раз. Если чт то найдется, то потом еще и еще пока не закончатся арреи. Но решил, что юзать тут рекурсию как то по говнокодерски. Учитывая, что в большинстве случаев вложенных тегов не будет и вместо того, чтобы прег_матч_олл использовать один раз - заюзаю его два раза.
  • Barbos

    Сообщения: ? Репутация: N Группа: Кто попало

    Spritz 18 августа 2012 г. 11:56, спустя 854 дня 21 час 24 минуты

    – У Вас совесть есть?– Есть, только мы ее не используем.

Пожалуйста, авторизуйтесь, чтобы написать комментарий!