使用PHP开发域名连续重复字符的缩写函数需求
符合新规则的PHP域名模式缩写函数实现
嘿,这就给你搞定这个PHP域名缩写函数,完全适配你调整后的规则!先明确下需求:
调整后的规则:当字母或数字连续重复5次及以上时,将其缩写为「字符+重复次数」的形式,比如8个连续L缩写为
L8,混合序列LLLLLLLNNNNNN(7个L+6个N)会被缩写为L7N6。
实现思路
- 用正则精准匹配连续出现≥5次的字母/数字片段
- 借助
preg_replace_callback对每个匹配片段做动态替换,生成「字符+次数」的缩写格式
完整代码
function abbreviateDomainPattern($pattern) { // 正则匹配连续5次及以上的字母/数字 return preg_replace_callback('/([a-zA-Z0-9])\1{4,}/', function($matches) { // 提取重复字符,计算总重复次数后拼接格式 return $matches[1] . strlen($matches[0]); }, $pattern); } // 测试用例,验证效果 echo abbreviateDomainPattern('LLLLLLL') . PHP_EOL; // 输出:L7 echo abbreviateDomainPattern('NNNNNN') . PHP_EOL; // 输出:N6 echo abbreviateDomainPattern('LLLLLLLNNNNNN') . PHP_EOL;// 输出:L7N6 echo abbreviateDomainPattern('AAAAA') . PHP_EOL; // 输出:A5(5次刚好触发缩写) echo abbreviateDomainPattern('AAABBB') . PHP_EOL; // 输出:AAABBB(不足5次,不处理) echo abbreviateDomainPattern('test11111abc') . PHP_EOL; // 输出:test15abc
代码说明
- 正则表达式
/([a-zA-Z0-9])\1{4,}/:([a-zA-Z0-9]):捕获单个字母或数字作为分组,后续用来取重复的字符\1{4,}:表示该捕获的字符连续出现4次及以上,加上前面的1次,总次数就是5次及以上,刚好符合新规则
preg_replace_callback会自动遍历所有匹配到的片段,回调函数里通过strlen($matches[0])获取当前匹配片段的总长度,再和捕获的字符拼接成缩写格式
扩展提示
如果需要支持更多字符(比如下划线_),只需要修改正则里的字符范围即可,比如改成:
'/([a-zA-Z0-9_])\1{4,}/'
内容的提问来源于stack exchange,提问作者AnnaLA
相关产品推荐
相关产品推荐

