我只是编写了一个小脚本,从交换机中提取数百个MAC地址进行比较,但是它们被格式化为"0025.9073.3014“,而不是标准的"00:25:90:73:30:14”。
我很难理解如何转换这个,我能想出的最好的方法就是在".“中把它们炸成碎片,然后把它们进一步分解成两块,然后用":”分隔器重新连接所有的部件。
我不介意使用讨厌的方法,但这让我很困扰,因为这是一个非常糟糕的方法。有什么办法能做得更好吗?
发布于 2014-10-03 10:44:42
str_replace与preg_replace的结合
$str = preg_replace('~..(?!$)~', '\0:', str_replace(".", "", $str));首先去掉.,然后在..之后添加:,如果没有,则在..后面添加两个字符(?!$)。
或者使用俘获群并在没有str_replace的情况下执行:
$str = preg_replace('~(..)(?!$)\.?~', '\1:', $str);在regex101.com进行测试
在表现上没有太大的差别。
发布于 2014-10-03 10:48:16
如果您不喜欢正则表达式,那么下面是另一种方法,如果您是PHP新手,这是可以理解的。基本上,它只是移除点,然后每隔2个字符将字符串拆分成数组,然后用冒号将它们内爆:
$string = "0025.9073.3014";
$result = implode(":", str_split(str_replace(".", "", $string), 2));
echo $result;产出:
00:25:90:73:30:14
发布于 2014-10-03 10:41:10
preg_replace与捕获组、反向引用的结合
$mac = "0025.9073.3014";
$mac = preg_replace('/(..)(..)\.(..)(..)\.(..)(..)/',
'$1:$2:$3:$4:$5:$6', $mac);
echo($mac);
// => 00:25:90:73:30:14https://stackoverflow.com/questions/26177399
复制相似问题