В PHP 5.3 разработчки решили, наконец, избавиться от POSIX регулярных выражений – в самом деле, зачем нужны две библиотеки для работы с регулярными выражениями, если можно обойтись одной? К тому же, POSIX регулярные выражения гораздо медленнее чем Perl совместимые регулярные выражения (PCRE).
Теперь, разработчики в срочном порядке исправляют свой код, заменяя функции ereg, eregi, ereg_replace, ereg_replacei соответствующими PCRE аналогами, благо, замена получилась довольно простой:
1. заменить ereg и eregi на preg_match, ereg_replace и ereg_replacei на preg_repalce;
2. добавить // разделители в начало и конец регулярного выражения;
3. если POSIX функция кончается на i (eregi, ereg_replacei) то добавить i в конец регулярного выражения после разделителя.
4. заменить POSIX спецсимволы соответствуюущими PCRE аналогами: [:alnum:] – \w или [0-9a-z], [:digit:] – \d или [0-9], [:space:] – \s, [:alpha:] – [a-z]
примеры:
ereg(‘expression’) -> preg_match(‘/expression/’)
eregi(‘expression’) -> preg_match(‘/expression/i’)
eregi(‘^[[:alnum:]][a-z0-9_.-]*@[a-z0-9.-]+\.[a-z]{2,4}$’) -> preg_match(‘/^[a-z0-9][a-z0-9_.-]*@[a-z0-9.-]+\.[a-z]{2,4}$/i’)
Кроме того, оказывается шаг четвертый не обязателен – спецсимволы типа [[:alnum:]] теперь поддерживаются в PCRE!
Recent Comments