PCRE парсинг аргументов функции

Тема в разделе "PHP", создана пользователем sartiii, 24 ноя 2008.

Статус темы:
Закрыта.
Модераторы: latteo
  1. sartiii

    sartiii Постоялец

    Регистр.:
    17 сен 2008
    Сообщения:
    105
    Симпатии:
    17
    Дано: есть строки с произвольными значениями, а в них могут встречаться макросы (оформленные по подобию функций) вида func("сосисочки","верблюжата, котята, бобрята",true,4)
    найти такие конструкции не пробема, но беда при парсинге аргументов. Всё бы ничего, но когда один из аргументов является строкой + содержит в себя запятую, то начинается самое интересное и explode(',', $strfunc); перестаёт справляться.
    Регулярки тоже крутил, но ничего хорошего не вышло. Помогайте! =)
     
  2. Liver

    Liver

    Регистр.:
    24 сен 2008
    Сообщения:
    316
    Симпатии:
    91
  3. sartiii

    sartiii Постоялец

    Регистр.:
    17 сен 2008
    Сообщения:
    105
    Симпатии:
    17
    Я ж написал что это макросы, а не PHP функции.
     
  4. elcaste

    elcaste

    Регистр.:
    30 ноя 2007
    Сообщения:
    322
    Симпатии:
    175
    Кусок текста в студию. Телепаты в отпуске.
     
  5. sartiii

    sartiii Постоялец

    Регистр.:
    17 сен 2008
    Сообщения:
    105
    Симпатии:
    17
    elcaste, молодец что спросил!
    вот например:
     
  6. RolCom

    RolCom

    Регистр.:
    12 мар 2008
    Сообщения:
    351
    Симпатии:
    108
    Выражения типо 2*(3+1) в функциях могут быть?
    Если нет, то на ходишь функции и их содержиное разбираешь по регулярке
    Код:
    \s*(?|[^,]*?|"[^"]*?"|'[^']*?')\s*(?:,|\Z)


    Добавлено через 10 минут
    Хотя, сами функции тоже надо еще найти по регулярке-
    Код:
    func\s*\(
    ((?:
      (?:[^,()]*?|"[^"]*?"|'[^']*?')
      (?:,|(?=))
    )*)\)
    На случай, если в кавычках есть скобки.
     
    sartiii нравится это.
Статус темы:
Закрыта.