Я не уверен, когда ereg
будет удалено, но моя ставка на PHP 6.0.
Что касается вашей второй проблемы (перевод ereg
на preg
), то это не кажется чем-то сложным, если в вашем приложении более 1 миллиона строк, то, конечно, у вас должны быть ресурсы, чтобы кто-то выполнял эту работу максимум неделю. , Я бы собрал все экземпляры ereg_
в вашем коде и настроил бы некоторые макросы в вашей любимой IDE (такие простые вещи, как добавление разделителей, модификаторов и т. Д.).
Могу поспорить, что большинство из 1768 регулярных выражений можно портировать с помощью макроса, а остальные, ну, в общем, с хорошей парой глаз.
Другой вариант может заключаться в написании оболочек для функций ereg
, если они недоступны, реализуя изменения при необходимости:
if (function_exists('ereg') !== true)
{
function ereg($pattern, $string, &$regs)
{
return preg_match('~' . addcslashes($pattern, '~') . '~', $string, $regs);
}
}
if (function_exists('eregi') !== true)
{
function eregi($pattern, $string, &$regs)
{
return preg_match('~' . addcslashes($pattern, '~') . '~i', $string, $regs);
}
}
Вы поняли идею. Кроме того, PEAR-пакет PHP Compat также может быть приемлемым решением.
Отличия от POSIX regex
Начиная с PHP 5.3.0, POSIX Regex
продление не рекомендуется. Есть
количество различий между POSIX
регулярное выражение и регулярное выражение PCRE. Эта страница списков
самые известные из них, которые
необходимо знать при конвертации в
PCRE.
- Функции PCRE требуют, чтобы шаблон был заключен в разделители.
- В отличие от POSIX, расширение PCRE не имеет специальных функций для
сопоставление без учета регистра. Вместо,
это поддерживается с помощью шаблона / I
модификатор. Другие модификаторы
также доступны для изменения
стратегия соответствия.
- Функции POSIX находят самое длинное из самых левых совпадений, но
PCRE останавливается на первом действительном совпадении.
Если строка не совпадает вообще
не имеет значения, но если это соответствует
это может иметь драматическое влияние как на
результирующее совпадение и совпадение
скорость. Чтобы проиллюстрировать эту разницу,
рассмотрим следующий пример из
«Освоение регулярных выражений»
Джеффри Фридл Используя образец
один (сам)? (самодостаточный)? на
самодостаточность с помощью PCRE
приведет к сопоставлению себя, но
используя POSIX, результат будет
полная строка сама по себе достаточна. И то и другое
(под) строки соответствуют оригиналу
строка, но POSIX требует, чтобы
Дольше всего будет результат.