2009-05-26 64 views
7

我需要从一个IP地址使用PHP修剪最后一个八位字节。基本上我试图在第三个点后删除任何数字。我想知道是否有一个开箱即用的解决方案?因为我的正则表达式能力基本上是最基本的。非常感谢。修剪IP地址八位组

回答

17
$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); 
+2

我还能要求什么?祝你有美好的一天! :) – 2009-05-26 09:39:51

0

Regexp vatiant

$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); 
2

这将删除最后一个数字和点。

$trimmed = preg_replace('/\.\d{1,3}$/', '', $ip);