<?php
$str="192.168.1.1";
function callback($m){
   $ip="";
   for($i=1;$i<=4;$i++){
       $ip.=sprintf("%03d",$m[$i]);
       if($i!=4) $ip.="- ";
   }
   return $ip;
}
echo preg_replace_callback("'(\d+)\.(\d+)\.(\d+)\.(\d+)'","callback",$str);
?>

解决方案 »

  1.   

    <?php
    $str="192.168.1.1";
    $bar="sprintf('%03d','\\1').'- '.sprintf('%03d','\\2').'- '.sprintf('%03d','\\3').'- '.sprintf('%03d','\\4')";
    echo preg_replace("'(\d+)\.(\d+)\.(\d+)\.(\d+)'e","$bar",$str);
    ?>
      

  2.   

    <?php
    function swap($v) {
      return sprintf("%03d",$v);
    }echo preg_replace(array("/\./","/(\d+)/e"),array("-","swap(\\1)"),"192.168.1.1");
    ?>
      

  3.   

    <?php    $str = "192.168.1.1";
        $strs = explode(".", $str);
        $new_str = "";
        foreach ($strs as $str)
        {
            $str = str_pad($str, 3, "0", STR_PAD_LEFT);
            $new_str .= "-" . $str;
        }
        $new_str = substr($new_str, 1);
        print_r($new_str)?>