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]+)|";