如何分割字符串,我的意思是将1234567890转换为12:34:56:78:90

时间:2012-02-03 09:11:57

标签: regex string macos perl

我需要将一些Mac数字(00163e2fbab7)转换为Mac字符串。 (用“:”)

有没有什么好方法可以将Mac号分成组?我指的是(00),(16),(3e),(2f),(ba),(b7)

我知道,List::Gen中有一个where函数,但我无法在我的主机中安装此软件包。那么,我该怎么做呢?

非常感谢!

4 个答案:

答案 0 :(得分:8)

如果您知道自己正在处理MAC地址,请使用专门为他们设计的库,例如Net::MAC

答案 1 :(得分:6)

my $mac = "00163e2fbab7";
$mac =~ s/..(?!$)\K/:/g;
print "$mac\n";

输出:

00:16:3e:2f:ba:b7

如果您没有Perl 5.10,可以使用:

$mac =~ s/(..)(?!$)/$1:/g;

答案 2 :(得分:6)

将字符串拆分为两个字符的块并使用join将它们重新组合在一起。喜欢这个

my $mac = "00163e2fbab7";
print join ':', $mac =~ /../g;

<强>输出

00:16:3e:2f:ba:b7

答案 3 :(得分:1)

solution会以多个formats打印地址。

my ($addr,$delim,$fmt) = (q(00163e2fbab7),q(:),q(2x));
printf qq(%*v0$fmt\n),$delim, pack(q(c*),(map { hex } 
(unpack(qq(A2) x int(length($addr)/2),$addr))));
带格式化选项的

OUTPUT

    {li>

    00:16:3e:2f:ba:b7 十六进制小写$fmt = q(2x)

    00:16:3E:2F:BA:B7时,
  • $fmt = q(2X) 十六进制大写。

  • 000:022:062:047:186:183时,
  • $fmt = q(3i) 整数

  • 000:026:076:057:272:267时,
  • $fmt = q(3o) 八进制

  • 00000000:00010110:00111110:00101111:10111010:10110111时,
  • $fmt = q(8b) 二进制

  • :XXII:LXII:XLVII:CLXXXVI:CLXXXIII时,
  • just kidding 罗马数字