Что не так в регах?

DiMA

php.spb.ru
Команда форума
Что не так в регах?

Есть хтмл страница в переменной. Есть рег.

preg_match("!<tbody id=TheBody>(.*)</tbody>!is", ...) - дает TRUE
preg_match("!<tbody id=TheBody>(.*?)</tbody>!is", ...) - дает FALSE

Странно. Что делать? В принципе, тут tbody на странице вообще один и можно обойтись без отключения жадности рега. Но что-то понять не могу, это у меня с головой проблема?

Обнаружил это при переходе с php 5.1.2 на 5.2.0.
 

WP

^_^
Не мог бы привести код страницы?

-~{}~ 10.11.06 12:08:

з.ы. preg_match ну никак давать TRUE не может.
 

SiMM

Новичок
> preg_match ну никак давать TRUE не может.
Но и 0 тут вроде быть не должен.
 

WP

^_^
SiMM
Да, я проверил на примере - оба дают int(1). PHP 5.2.0, под win32. Поэтому хотелось бы повтыкать в код странички.
 

DiMA

php.spb.ru
Команда форума
вот пример

<?
$buf=file_get_contents("zzz2.html"); // download by http://slil.ru/23382363
var_dump(preg_match("!<tbody id=TheBody>(.*)</tbody>!is", $buf, $ok)); // 1
var_dump(preg_match("!<tbody id=TheBody>(.*?)</tbody>!is", $buf, $ok)); // 0
?>

Apache/2.2.3
PHP 5.2.0, 5.2.1-dev
Windows 2000
в конфиге лимит памяти увеличил до 128М

на Windows XP работает

на Windows 2000 + PHP 5.1.2 тоже работаЛО

Кстати, никто не замечал, что новый апач виснет регулярно сам собой? С 2.0 такого не было никогда.
 

DiMA

php.spb.ru
Команда форума
Это был отличный хостинг, 1Мбайт/с

http://www.webfile.ru/1186154
 

WP

^_^
DiMA
А скорость с мегабитого стрима была 0.5 кб/сек. А потом вообще повисло. webfile.ru - другое дело.
-------------
Итак, вердикт.
PHP:
<?php
$string = file_get_contents('string.txt');
var_dump(preg_match('~<start>(.*)</end>~si',$string)); // 1
var_dump(preg_match('~<start>(.*?)</end>~si',$string)); // 0
?>
Срабатывает с string.txt:
<start>
AAAAAA<всего должно быть >= 99993>AAAAAAAA
</end>
С меньшим - срабатывает как надо.

-~{}~ 10.11.06 14:02:

p.s. заменял ~<start>(.*?)</end>~si на ~<start>(.*)</end>~siU - тот же эффект.
 

Гравицапа

elbirret elcno

DiMA

php.spb.ru
Команда форума
<?
$buf="<start>".str_repeat("x",10000000)."</stop>";
echo strlen($buf)." - ";
var_dump(preg_match("!<start>(.*)</stop>!is", $buf, $ok)); // 1
var_dump(preg_match("!<start>(.*?)</stop>!is", $buf, $ok)); // 0
?>

При 10 000 000 глюк и на WinXP.

На Win200 граница - 99996 байт.

Гравицапа, так чего, там ЭТОТ баг описан или нет? Вроде описан похожий, только более сложным примером.
 

DiMA

php.spb.ru
Команда форума
http://bugs.php.net/bug.php?id=39459

Ну, что, через сколько минут некий прошлогодний придурок опять закроет багрепорт? :)

-~{}~ 10.11.06 15:40:

11 минут =)
 
Сверху