Функция eregi() устарела

Функция eregi() устарела. Как я могу заменить eregi(). Я пытаюсь использовать preg_match, но затем перестаю работать.

я нам это помочь:

http://takien.com/513/how-to-fix-function-eregi-is-deprecated-in-php-5-3-0.php

КОД ДО:

if ( ! eregi("convert$", $this->library_path))
        {
            if ( ! eregi("/$", $this->library_path)) $this->library_path .= "/";

            $this->library_path .= 'convert';
        }

if (eregi("gd2$", $protocol))
        {
            $protocol = 'image_process_gd';
        }

КОД ТОГДА:

if ( ! preg_match("convert$/i", $this->library_path))
        {
            if ( ! preg_match("/$/i", $this->library_path)) $this->library_path .= "/";

            $this->library_path .= 'convert';
        }

if (preg_match("gd2$/i", $protocol))
        {
            $protocol = 'image_process_gd';
        }

person senzacionale    schedule 18.04.2011    source источник
comment
PHP движется к расширению PCRE: php.net/manual/en/function.eregi.php   -  person JohnP    schedule 18.04.2011


Ответы (3)


preg_match ожидает, что его аргумент регулярного выражения будет находиться в пределах пары разделителей.

Так что постарайтесь:

if ( ! preg_match("#convert$#i", $this->library_path)) {
        if ( ! preg_match("#/$#i", $this->library_path)) 
                $this->library_path .= "/";

        $this->library_path .= 'convert';
}

if (preg_match("#gd2$#i", $protocol)) {                                         
        $protocol = 'image_process_gd'; 
}     
person codaddict    schedule 18.04.2011
comment
Нет необходимости выполнять эту конкретную задачу с помощью регулярных выражений.., - person Dunhamzzz; 19.04.2011

Кажется, вы просто забыли разделитель

preg_match("~/$~", $this->library_path)

и

preg_match("~gd2$~i", $protocol)

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

$this->library_path[strlen($this->library_path) - 1] == '/'
substr($protocol, -3) == 'gd2'
person KingCrunch    schedule 18.04.2011

Если вы просто проверяете наличие одной строки внутри другой, вам следует просто использовать функцию strpos(). например:

if(strpos('convert', $this->library_path) !== false) {
    // code here
}

Обновление: неправильно поняли, что вы хотите проверить его в конце строки, это все еще возможно без регулярного выражения с помощью substr():

if(substr($this->library_path, -7) == 'convert'  {
    //code here
}

Где 7 — длина преобразования, вы можете использовать strlen и вычесть его из 0, чтобы получить это число динамически. Это не запустит какое-либо регулярное выражение, поэтому намного эффективнее.

person Dunhamzzz    schedule 18.04.2011