Php 转换MAC地址格式
我刚刚编写了一个小脚本,从交换机中提取数百个MAC地址进行比较,但是它们的格式是“0025.9073.3014”,而不是标准的“00:25:90:73:30:14” 我被如何转换这个问题难住了,我能想到的最好办法是在“.”处将这些分解成碎片,然后进一步将它们分解为每个2块,然后用“:”分隔符重新连接所有部分 我对黑客的方法很满意,但这让我很困扰,因为这是一种非常糟糕的方法。有什么方法可以更好地执行此操作吗?使用:Php 转换MAC地址格式,php,regex,formatting,mac-address,Php,Regex,Formatting,Mac Address,我刚刚编写了一个小脚本,从交换机中提取数百个MAC地址进行比较,但是它们的格式是“0025.9073.3014”,而不是标准的“00:25:90:73:30:14” 我被如何转换这个问题难住了,我能想到的最好办法是在“.”处将这些分解成碎片,然后进一步将它们分解为每个2块,然后用“:”分隔符重新连接所有部分 我对黑客的方法很满意,但这让我很困扰,因为这是一种非常糟糕的方法。有什么方法可以更好地执行此操作吗?使用: str\u replace和preg\u replace的组合: $str = p
str\u replace
和preg\u replace
的组合:
$str = preg_replace('~..(?!$)~', '\0:', str_replace(".", "", $str));
首先剥离
,然后在之后添加:
。
任何字符中的两个(?!$)
,如果不在末尾
或者使用一种无需str_替换的方法:
$str = preg_replace('~(..)(?!$)\.?~', '\1:', $str);
性能上没有太大差别。如果您不喜欢正则表达式,那么这里有另一种方法,如果您是PHP新手,这更容易理解。基本上,它只是删除点,然后每2个字符将字符串拆分为一个数组,然后用冒号将其内爆:
$string = "0025.9073.3014";
$result = implode(":", str_split(str_replace(".", "", $string), 2));
echo $result;
产出:
00:25:90:73:30:14
另一个选项,如果mac地址在此格式中保持不变
$str = '0025.9073.3014';
$str = preg_replace('~\d+\K(?=\d\d)|\.~', ':', $str);
echo $str; //=> "00:25:90:73:30:14"
奇怪的是,这只在特定的MAC地址上有效,在其他地址上无效,但感谢您的示例@BrettPowell,我应该用
而不是\d
,因为mac地址包含十六进制。我相应地更新了答案。谢谢你的反馈。
$str = '0025.9073.3014';
$str = preg_replace('~\d+\K(?=\d\d)|\.~', ':', $str);
echo $str; //=> "00:25:90:73:30:14"