Странное поведение ereg()

partizan

Новичок
Странное поведение ereg()

PHP:
echo ereg('^[a-zA-Z0-9_\.\-]+$','pasdasd-.22') ? 'TRUE' : 'FALSE';
-----------------------
TRUE

PHP:
echo ereg('^[a-zA-Z0-9_\-\.]+$','pasdasd-.22') ? 'TRUE' : 'FALSE';
-----------------------
FALSE

Почему так?
 

440hz

php.ru
Символ минус '-' внутри класса используется для задания символьного диапазона. Например, [d-m] соответствует любому символу, находящемуся между 'd' и 'm', включая сами символы 'd' и 'm'. В случае, если '-' необходим, как член класса, он должен находиться в такой позиции, в которой он не может интерпретироваться как диапазон (как правило, это первый и последний символ описания класса) либо экранироваться при помощи обратного слеша.
 

FireNet

Новичок
Действительно не работает :) Не поверил - проверил. Почему, увы сказать не могу, самому интересно. Но с preg_match такого глюка не наблюдается, да и работает он быстрее. Есть подозрение, что это бага самого php. Да и разработчики вроде сами рекомендуют использовать именно perl-совместимые регулярные выражения и соотвествующие php функции.

З.Ы. Так получилось, что когда писал сообщение, ответа 440hz еще не было. И, символ '-' экранируется в обоих случаях слешом в приведенном выше коде. И его назначение что в POSIX регулярных выражениях и perl-выражениях вроде бы одинаково. Но при использовании preg_match все работает почему то нормально..
 

440hz

php.ru
PHP:
<?
echo "\n".(ereg('^[a-zA-Z0-9_\.\-]+$','pasdasd-.22') ? 'TRUE' : 'FALSE');
echo "\n".(ereg('^[a-zA-Z0-9_\-\.]+$','pasdasd-.22') ? 'TRUE' : 'FALSE');
print "\n";
?>
мдя ... странно ... проверил и под 4 и под 5
 

FireNet

Новичок
Если это глюк, то пхпный. Если нет, то надо мануалить, что за ньюанс. *Ушел манить*
 

tony2001

TeaM PHPClub
>Если это глюк, то пхпный.
ага, ведь это же PHP выполняет регэксп, никак не PCRELib.
 

xpgeek

Новичок
Это не баг.
Этот случай обсуждали на php.net. Ман подтвердил, что ereg выполнялся правильно.
Вот ссылка на ман по pcre - http://www.tin.org/bin/man.cgi?section=7&topic=regex .
А вот ссылка на обсуждение проблемы - http://ua2.php.net/manual/ru/function.ereg.php#57387 .
 
Сверху