1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вступайте в наш Telegram чат: https://t.me/a_parser Нас уже 1500+ и мы растем!
    Скрыть объявление

Есть ли ограничение на размер выделяемого регулярным выражением "([^"]+?)"

Тема в разделе "Техническая поддержка", создана пользователем Gorn, 25 сен 2019.

Метки:
  1. Gorn

    Gorn A-Parser Pro License
    A-Parser Pro

    Регистрация:
    6 июл 2017
    Сообщения:
    67
    Симпатии:
    17
    Сделал пресет для сбора текста с некого сайта и столкнулся с тем, что при небольших размерах страницы всё работает как надо - нужный текст попадает весь в выражение
    "([^"]+?)"
    а если текст становится более нескольких десятков килобайт (ЭТО НОРМАЛЬНО, так и должно выделяться!) , то вообще выражение не отрабатывает, в логе появляется сообщение

    Template execute error: undef error - WHILE loop terminated (> 1000 iterations)

    Как обойти это ограничение?
     
  2. Support

    Support Administrator
    Команда форума A-Parser Enterprise

    Регистрация:
    16 мар 2012
    Сообщения:
    3.271
    Симпатии:
    1.806
    Никаких ограничений в регулярном выражении на размер захватываемой строки нету.
    А указанная ошибка говорит о том, что у вас в шаблоне в цикле WHILE совершается (или теоретически может быть) более 1000 итераций. И выдается она, т.к. установлена защита от зацикливания, которое в свою очередь может привести к зависанию и т.п. проблемам.
    Попробуйте изменить логику в шаблоне таким образом, чтобы избежать зацикливания или выхода за установленный лимит итераций. Если не получится - пришлите в личку ваш пресет и запрос, на котором это воспроизводится.
     
  3. Gorn

    Gorn A-Parser Pro License
    A-Parser Pro

    Регистрация:
    6 июл 2017
    Сообщения:
    67
    Симпатии:
    17
    Да, видимо тут в цикле while есть внутреннее ограничение, у меня так сделано
    [% max=p1.nam3.size; i=0 ;
    WHILE i < max;
    '"' _ p1.nam3.$i.name3 _ ";" _ '\n' ;
    i=i+1;END; %]

    подскажите, как переделать цикл без while ?
     
  4. Support

    Support Administrator
    Команда форума A-Parser Enterprise

    Регистрация:
    16 мар 2012
    Сообщения:
    3.271
    Симпатии:
    1.806
    Видимо размер массива p1.nam3 больше 1000

    Код:
    $p1.nam3.format('"$name3;\n')
    или
    Код:
    [% FOREACH item IN p1.nam3;
       '"' _ item.name3 _ ";\n";
    END %]
     
  5. Gorn

    Gorn A-Parser Pro License
    A-Parser Pro

    Регистрация:
    6 июл 2017
    Сообщения:
    67
    Симпатии:
    17
    Спасибо, но мне надо, чтобы цикл с переменной i был ,
    там в цикле идет вывод НЕСКОЛЬКИХ массивов одинаковой длины
    WHILE i < max;
    '"' _ p1.nam3.$i.name3 _ ";" _ p1.nam4.$i.name4 _ '\n' ;
    то есть нужен цикл со счетчиком i
     
    #5 Gorn, 25 сен 2019
    Последнее редактирование: 25 сен 2019
  6. Support

    Support Administrator
    Команда форума A-Parser Enterprise

    Регистрация:
    16 мар 2012
    Сообщения:
    3.271
    Симпатии:
    1.806
    Код:
    [% max = p1.nam3.size - 1;
    FOREACH i IN [0..max];
       ...
    END %]
     

Поделиться этой страницей