警告:preg_match():未知的修饰符'。'在取代ereg之后

时间:2015-01-19 22:12:51

标签: php regex codeigniter preg-match

我有这个原始代码:

/**
* IP address conversion: A.B.C.D -> log
*
* @param string $string IP Address: A.B.C.D
* @return long
* @access private
* @static
* @since 1.0
*/
private function convert2number($string)
{
    $pattern= "\"([0-9]+)\"";
    if (ereg($pattern, $string, $regs))
        return (int)$regs[1];
}

/**
* IP conversion
*
* @param string $address IP address in the A.B.C.D format
* @return long
* @access private
* @static
* @since 1.0
*/
private function IpAddress2IpNumber($address)
{
    $pattern = "([0-9]+).([0-9]+).([0-9]+).([0-9]+)";

    if (ereg($pattern, $address, $regs))
        return $number = $regs[1] * 256 * 256 * 256 + $regs[2] * 256 * 256 + $regs[3] * 256 + $regs[4];
    else
        return false;
}

自PHP 5.3起,ereg已弃用,我对此进行了研究,我偶然发现了将ereg替换为preg_match的建议,我这样做了,我收到了一个新错误:

Warning: preg_match(): Unknown modifier '.' in geoip.php on line 222

代码:

/**
* IP conversion
*
* @param string $address IP address in the A.B.C.D format
* @return long
* @access private
* @static
* @since 1.0
*/
private function IpAddress2IpNumber($address)
{
    $pattern = "([0-9]+).([0-9]+).([0-9]+).([0-9]+)";

    if (preg_match($pattern, $address, $regs))
        return $number = $regs[1] * 256 * 256 * 256 + $regs[2] * 256 * 256 + $regs[3] * 256 + $regs[4];
    else
        return false;
}

我该如何解决这个问题?有什么建议?谢谢!

2 个答案:

答案 0 :(得分:1)

您需要使用preg_match分隔符。请参阅the docs on this topic

答案 1 :(得分:-1)

  1. ""需要一个" \"避免将其视为任何角色。
  2. 模式需要preg_match的分隔符。

    $pattern = "|([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)|";