Regex 如何分割字符串,我的意思是将1234567890转换为12:34:56:78:90
我需要将一些Mac号码(00163e2fbab7)转换为Mac字符串。(带“:”) 有什么好办法把Mac号码分成几个组吗?我的意思是进入(00),(16),(3e),(2f),(ba),(b7)Regex 如何分割字符串,我的意思是将1234567890转换为12:34:56:78:90,regex,string,macos,perl,Regex,String,Macos,Perl,我需要将一些Mac号码(00163e2fbab7)转换为Mac字符串。(带“:”) 有什么好办法把Mac号码分成几个组吗?我的意思是进入(00),(16),(3e),(2f),(ba),(b7) 我知道,其中有一个函数,但我无法在我的主机上安装此软件包。那么,我该怎么做呢 非常感谢你! 输出: 00:16:3e:2f:ba:b7 如果没有Perl 5.10,可以使用: $mac =~ s/(..)(?!$)/$1:/g; 如果您知道您正在处理MAC地址,请使用专门为其设计的库,如将字符串拆分
我知道,其中有一个
函数,但我无法在我的主机上安装此软件包。那么,我该怎么做呢
非常感谢你!
输出:
00:16:3e:2f:ba:b7
如果没有Perl 5.10,可以使用:
$mac =~ s/(..)(?!$)/$1:/g;
如果您知道您正在处理MAC地址,请使用专门为其设计的库,如将字符串拆分为两个字符块,然后使用连接
将它们重新组合在一起。像这样
my $mac = "00163e2fbab7";
print join ':', $mac =~ /../g;
输出
00:16:3e:2f:ba:b7
这将打印多个地址
输出带格式选项
00:16:3e:2f:ba:b7
hex当$fmt=q(2x)
时小写
00:16:3E:2F:BA:B7
hex当$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:10110110111
二进制当$fmt=q(8b)
时
:XXII:LXII:XLVII:CLXXXVI:CLXXXIII
罗马数字当只是开玩笑时
使用$&
会减慢进程中每个未捕获的正则表达式的速度。修正。@ikegami:谢谢。我没有让\K
工作,但我意识到我正在这台计算机上使用v5.8.5
(颤栗),而\K
在v5.10.0
中是新的。5.8.5于2004年7月发布。请更新到最近的版本:/@flesk,添加了不使用$&
的5.10之前版本。5.8和5.10不再受支持,5.12的发布日期也在不断增加,因为5.16的发布正在迅速临近。@ikegami:谢谢。5.8
是我的工作环境,不幸的是,我没有太多的控制权。“我不能在我的主机上安装这个软件包”-哦,你可以。看见
00:16:3e:2f:ba:b7
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))));