Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何分割字符串,我的意思是将1234567890转换为12:34:56:78:90_Regex_String_Macos_Perl - Fatal编程技术网

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

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地址,请使用专门为其设计的库,如将字符串拆分

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

有什么好办法把Mac号码分成几个组吗?我的意思是进入(00),(16),(3e),(2f),(ba),(b7)


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

非常感谢你! 输出:

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))));