Загадка специалистам по PHP
16 января 2011 года, 12:53
Как вы думаете, что выведут следующие операторы?
<?php
echo preg_match('#тес#iu', 'Такой Вот Тест');
echo preg_match('#Тес#Siu', 'Такой Вот Тест');
echo preg_match('#тес#Siu', 'Такой Вот Тест');
echo preg_match('#во#Siu', 'Такой Вот Тест');
Логика подсказывает, что 1111, а на опыте оказалось 1101. Причем и в Windows, и в Linux (Debian, PHP 5.2.6). Я подумал, что комбинация модификаторов Siu несовместима (и даже убрал в отлаживаемом коде модификатор S). Но почему тогда последнее регулярное выражение срабатывает правильно?
Кто подскажет, в чем тут дело?
Ключевые слова: PHP
Комментарии
#1. 26 января 2011 года, 01:03. Андрей Колпаков пишет:
У меня выводит 1111 на PHP 5.3.4.
Предположу, что в твоем случае такой эффект дает ошибка PHP :-)
Предположу, что в твоем случае такой эффект дает ошибка PHP :-)
#2. 26 января 2011 года, 01:16. пишет:
Или ошибка в библиотеке для работы с регулярными выражениями, с которой скомпилирован PHP.
Кстати, проверил только что на сервере, к которому есть доступ и у тебя, и у меня :)
Там PHP 5.3.2 и выдает 1101.
Кстати, проверил только что на сервере, к которому есть доступ и у тебя, и у меня :)
Там PHP 5.3.2 и выдает 1101.
#3. 27 января 2011 года, 21:41. Андрей Колпаков пишет:
А в таком случае:
echo preg_match('#tes#iu', 'This Is Test');
echo preg_match('#Tes#Siu', 'This Is Test');
echo preg_match('#tes#Siu', 'This Is Test');
echo preg_match('#is#Siu', 'This Is Test');
наш сервер выдает 1111.
То есть, в этой библиотеке ошибка для регистров non-ASCII символов при наличии модификатора S.
Даже жалко, что уже исправили. А то можно было бы засандалить баг авторам PHP или авторам библиотеки! :-)
echo preg_match('#tes#iu', 'This Is Test');
echo preg_match('#Tes#Siu', 'This Is Test');
echo preg_match('#tes#Siu', 'This Is Test');
echo preg_match('#is#Siu', 'This Is Test');
наш сервер выдает 1111.
То есть, в этой библиотеке ошибка для регистров non-ASCII символов при наличии модификатора S.
Даже жалко, что уже исправили. А то можно было бы засандалить баг авторам PHP или авторам библиотеки! :-)