Регулярка - парсим "длинное изображение строки"

ksnk

прохожий
Регулярка - парсим "длинное изображение строки"

Захотелось, вот, разобрать на теги предложение, состоящее из слов, знаков препинания и заквоченных одинарными-двойными кавычками строк. Написалось такое вот регулярное предложение:
PHP:
$reg='~[\n\r\s]*
    (?:([\'"])
        ((?:
            [^\\1\\\\]
        |
            \\\\.
        )*)
        \\1
    | (\w+)(?=\b)
    | (.)
    )
    ~xsU';
$str="name '\\'' tag '' par='".str_repeat('X',1000)."'";

preg_match_all($reg,$str,$m);

for($i=1;$i<count($m[0]);$i++){
    if   (!empty($m[1][$i])) echo '&lt;'.htmlspecialchars($m[2][$i]).'&gt;<br>';
    else if($m[3][$i]!='')  echo '&lt;'.htmlspecialchars($m[3][$i]).'&gt;<br>';
    else if($m[4][$i]!='')  echo '&lt;'.htmlspecialchars($m[4][$i]).'&gt;<br>';
}
Однако, если в параметр str_repeat вписать вместо 1000, к примеру 2000, то от апача просто ничего не доходит, похоже глючит PHP... Версия PHP - 5.1.6
Собственно вопрос - как лечить? Может как-нибудь переделать регулярку, чтобы и слеши не теряла и PHP не умирал...
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
[невнимательность]
 

ksnk

прохожий
StUV
Не убедительно ... при 100 время выполнения 0.004867 сек, при 1550 - 0.006636 сек, при 1600 не выводит ничего - файл вывода нулевой длины.
 

ksnk

прохожий
WP
Забавно! на версии PHP/4.4.1 та-же фигня, только падает быстрее - где-то в интервале от 1000 до 1500 :)

Да, на версии 5.2.5 - не глючит... осталось только убедить хостера в полезности смены версии... ;-)
 

Gas

может по одной?
Да, на версии 5.2.5 - не глючит... осталось только убедить хостера в полезности смены версии... ;-)
Дык ветка 5.1 не апдейтится уже 1.5 года, ни тебе даже Security/Bug fix'ов. Хотя админы, с*ка, ленивые :)
 

ksnk

прохожий
tony2001 параметр забавный, однако применяется только с версии 5.20, где моя проблема уже не актуальна...

Так как хостеры - народ действительно ленивый, остается вопрос - как в принципе можно пропарсить большую (у меня - до 6-х кб и это не предел) строку в формате ( X | "Y" )*, где в Y можно использовать слеши? Какие-нибудь идеи, кроме связок strpos + substr?
 
Сверху