我需要使用php从ip地址修剪最后一个八位字节。基本上我试图删除第三个点后的任何数字。我想知道是否有开箱即用的解决方案吗?因为我的正则表达能力是最基本的。非常感谢。
答案 0 :(得分:20)
$trimmed = implode(".", array_slice(explode(".", $ip), 0, 3));
或
$trimmed = substr($ip, 0, strrpos($ip, "."));
或可能
$trimmed = preg_replace("/(\d{1,3})\.(\d{1,3}).(\d{1,3}).(\d{1,3})/", '$1.$2.$3', $ip);
一种更加数学的方法,它不会删除最后一位数字,而是将其替换为0:
$newIp = long2ip(ip2long("192.168.0.10") & 0xFFFFFF00);
答案 1 :(得分:2)
这将删除最后的数字和点。
$trimmed = preg_replace('/\.\d{1,3}$/', '', $ip);
答案 2 :(得分:0)
正则表达式
$ip = '192.168.20.10';
preg_replace_callback(
'/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/'
, create_function('$matches', '$matches[4] = "0"; array_shift($matches); return implode(".", $matches);')
, $ip
);
您也可以使用ip2long和long2ip ...但不知道“盒子解决方案”:
$ip = ip2long('192.168.20.10') - 10;
echo long2ip($ip);