PHP тупит с регулярными выражениями...

Safary

Новичок
Safary тупит с регулярными выражениями... =)

протестируйте такой скрипт

PHP:
<?
$str="f";
if(ereg("[а-Я]",$str)){
echo('TRUE'); 
}
else{
echo('FALSE');
}
?>
выдает у вас ошибку? У меня да... на 3-ей строке. Не нравится ему "[а-Я]", хотя "[а-я]" нравится.... А пишет вот что:
PHP:
Warning: ereg() [function.ereg]: REG_ERANGE in Z:\home\test1.ru\www\index.php on line 3
Я конечно не утверждаю что PHP тупит, но вроде всё правильно... или нет?

-~{}~ 24.12.08 21:25:

вообще странно, написал в $str слово хрюша, а он сравнивает с выражением [а-Я] и выдает сначала ошибку, а потом FALSE...
 

HraKK

Мудак
Команда форума
запомни в 100,01% случаев тупишь ты а не PHP. Как только это уяснишь, дело двинеться с места.
И не используй ereg - юзайте preg
 

Safary

Новичок
с [а-я] не тупит и выдает TRUE на хрюшу... а с [а-Я] неправильно, че-то странно...
 

x-yuri

Новичок
загляни в табицу символов и посмотри коды используемых букв

ты, наверное, хотел написать
ereg("[А-я]",$str) :confused:
правда есть еще некоторые буквы, которые в этот диапазон не попадают, например, ё, Ё...
 

Safary

Новичок
ну я просто по этой документации http://www.csu.ac.ru/~rusear/WebTech/bookphp/gl7_1.php.htm изучал, там написано [а-Я], вот я и думал че тупит...

HraKK, я работу с perl-совместимыми выражениями нигде не нашел полную и на русском, поэтому пока php-совместимые изучаю, а потом perl буду, вообще мне только perl нужна будет, она ж быстрее и для mod_rewrite хочу фильтр страниц написать(он то perl).. Ради этого в принципе и изучаю..

-~{}~ 24.12.08 21:31:

x-yuri, да с [А-я] не выдает ошибки. Блин, устарешие учебники эти... Чтоб их :)
 

x-yuri

Новичок
а ты скрипт в utf-8 сконвертируй, должно работать

-~{}~ 24.12.08 21:36:

Safary они не устаревшие, там просто описываются регэкспы абстрактно, без учета где они использоваться будут (по-крайней мере на той страничке)

а ereg откуда взял?

-~{}~ 24.12.08 21:42:

но в документации как-то не сказано про разные кодировки и какой порядок символов
а для utf-8 есть специальный флаг - u
так что если использовать русские символы, то лучше в preg_match с флагом u

-~{}~ 24.12.08 21:45:

в общем либо надо использовать однобайтовую кодирвку и тогда порядок символов определяется по таблице символов

либо utf-8, тогда флаг u надо указывать, иначе скорее всего будут восприниматься отдельные байты, а не символы
 

Safary

Новичок
x-yuri, эээ... ты про кодировку страницы? у меня она вообще windows-1251...
 

Splurov

Новичок
Нет, у буквы "а" позиция в таблице 72, а у буквы "Я" 71, вы указываете период с 72 по 71 символ, на что php и ругается.
update: Ух сколько понаписали, пока я до этого таба дошёл...
 

HraKK

Мудак
Команда форума
http://phpfaq.ru/regexp
Читаем до достижения дзена.
 

DiMA

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

if(ereg("[а-Я]",$str)){
echo('TRUE');
}
else{
echo('FALSE');
}

будь краток:

var_dump(preg_match("!^[А-Яа-я]*$!", $str));
 

Safary

Новичок
Спасибо всем, кстати если ещё новички есть, типа меня - то вот нашел ща статью - http://phpclub.ru/detail/article/regexp_1

Сам читаю сейчас и начинаю понимать полностью, но по чуть-чуть. Сначала автор на работе с командной строкой всё обьясняет и только потом в ПХП, очень подробная статья.

-~{}~ 24.12.08 22:30:

Упс :D мне ж HraKK только что ссылку дал эту, сорри.. Сам по его ссылке зашел и в этой же теме ссылку напечатал :D

-~{}~ 24.12.08 22:52:

блин, вот делаю всё как в той статье написано, но опять ПХП ругается...

Warning: preg_match() [function.preg-match]: Unknown modifier '{' in Z:\home\test1.ru\www\index.php on line 3

теперь ругается на вот квантификаторы - {
использую preg_match()
 
Сверху