【发布时间】:2020-12-26 02:33:01
【问题描述】:
我有一个字符串,我只想用随机数字替换奇数位置。
例如,字符串是'123456'。现在我想要的输出是'528496';
请注意,奇数位的数字 1,3,5 被随机数字 5,8,9 替换。
我知道如何使用 PHP 循环来做到这一点,但想知道是否可以使用正则表达式来完成。
我在网上找到了以下两个相关的解决方案,但仍然无法使其工作。
解决方案 1
echo preg_replace('/(.)./', '$1 ', $str);
解决方案 2
echo preg_replace_callback('/\d/', function() {
return chr(mt_rand(97, 122));
}, $str);
PS:我试图对这些问题发表评论,但由于我的声誉只有 5,所以我无法:(
【问题讨论】:
-
试试
preg_replace_callback('/.(.)/s', function($m){ return chr(mt_rand(48, 57)) . $m[1]; }, '123456');,见3v4l.org/8dDmL -
您特别要求使用正则表达式,但也可以使用 str_split、array_map、如果奇数替换取模,重新组合在一起3v4l.org/h8U0A
-
不用
chr(),可以用mt_rand(0, 9)。从 PHP 7.4 开始,您甚至可以编写:echo preg_replace_callback('/.(.)/', fn($m) => rand(0,9) . $m[1], '123456'); -
我请求你们三个停止发布答案,因为在采取任何行动之前,cmets 已被清除,所以我不知道你们是否收到了 ping。请决定是否要将您的评论转移到答案。无论如何,请删除您正在解析的 cmets。
标签: php regex preg-replace preg-replace-callback