Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 警告:preg_match():替换ereg后未知修饰符“.”_Php_Regex_Codeigniter_Preg Match - Fatal编程技术网

Php 警告:preg_match():替换ereg后未知修饰符“.”

Php 警告:preg_match():替换ereg后未知修饰符“.”,php,regex,codeigniter,preg-match,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($p

我有这个原始代码:

/**
* 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;
}
由于PHP5.3,ereg被弃用,我对此进行了研究,偶然发现了一个建议,用preg_match替换ereg,我这样做了,我得到了一个新的错误:

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


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

您需要在preg_match中使用分隔符。看

. 需要\以避免将其视为任何字符。 模式需要分隔符才能进行预匹配

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

我删除了CakePHP标记,这与CakePHP.RTFM无关:您正在重新创建php附带的功能我需要编辑什么?我是phpy新手。我们的正则表达式前面必须有分隔符,后面必须有分隔符。典型的选择是/、`和~。@Sup3r读取docs@Sup3r不知道你的意思。\[0-9]+\中没有/s。分隔符位于表达式的开头和结尾。不要只给出代码。解释出现问题的原因并描述如何解决。就像那个男人和他的钓鱼杖一样谢谢@zairwolf,正确的方法是什么$模式=/[0-9]+[0-9]+[0-9]+[0-9]+[0-9]+/;或者$pattern=|[0-9]+\[0-9]+\[0-9]+\[0-9]+\[0-9]+\;分隔符可以是任何非字母数字、非反斜杠、非空白字符。。请阅读以下内容:
$pattern = "|([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)|";