如何以一定的间隔放置角色?

时间:2015-11-01 02:16:50

标签: php

我试图在PHP中的字符串中以特定间隔放置一个短划线。 这是我从JSON GET中检索到的字符串:

fb396a80cada446f9e63d871116b8ddf

这就是我需要字符串的样子:

fb396a80-cada-446f-9e63-d871116b8ddf

我如何按间隔放置破折号?

我试过这个,但没效果:

$mcuuid = $json_decode->id;

$p1 = substr($mcuuid, 0, 7);
$p2 = substr($mcuuid, 8, 12);
$p3 = substr($mcuuid, 12, 15);
$p4 = substr($mcuuid, 16, 19);
$p5 = substr($mcuuid, 20, 31);

$final = $p1 . "-" . $p2 . "-" . $p3 . "-" . $p4 . "-" . $p5;

2 个答案:

答案 0 :(得分:3)

            $mcuuid = "fb396a80cada446f9e63d871116b8ddf" ;
            $p1 = substr($mcuuid, 0, 7);
            $p2 = substr($mcuuid, 8, 4);
            $p3 = substr($mcuuid, 12, 4);
            $p4 = substr($mcuuid, 16, 4);
            $p5 = substr($mcuuid, 20);


            $final = $p1 . "-" . $p2 . "-" . $p3 . "-" . $p4 . "-" . $p5;

            echo $final;

答案 1 :(得分:3)

你可以用正则表达式来做。

echo preg_replace('~^(.{8})(.{4})(.{4})(.{4})(.{4})(.*)$~', 
                  '$1-$2-$3-$4-$5', 
                  'fb396a80cada446f9e63d871116b8ddf');

输出:

fb396a80-cada-446f-9e63-d871

.是任何字符
{}是您要允许的前一个字符/组的字符数。 ()捕获其中发现的值 替换中的$1是1个捕获组 *是一个量词,表示零个或多个字符
^$是锚;他们要求完整的字符串是匹配的(更具体地说,^是字符串的开头,$是结尾)。

Regex101演示:https://regex101.com/r/oI1hU0/1