[英]PHP Replace any repeated letters with less number of letters
我想将相同的5个重复数字或字母的序列减少为相同的2个重复数字或字母的序列。
即aaaaa => aa
问题:
我不确定要在preg_replace()
参数中放置什么样式。
例:
preg_replace('/[a-zA-Z0-9]{5}/','/[a-zA-Z0-9]{2}/',$str);
有任何想法吗? :)
您需要使用捕获组和反向引用:
$str = preg_replace('~([a-zA-Z0-9])\1{4}~', '$1$1', $str);
要么
$str = preg_replace('~([a-zA-Z0-9])\1\K\1{3}~', '', $str);
细节模式1:
~ # pattern delimiter
( # open the capture group 1
[a-zA-Z0-9]
) # close the capture group 1
\1{4} # backreference: repeat 4 times the content of the capture group 1
~
在替换字符串$1
引用捕获组1的内容。 (在模式中为\\1
)
第二种模式并没有什么不同,它仅使用\\K
功能,将匹配结果左侧的所有内容都删除了。 使用此技巧,由于保留了两个字母,因此无需将它们放在替换字符串中。 仅替换最后3个字母。
这是使用简单的字符串函数和基本的编程结构来实现的一种方法:
$str="aaaaa 11111 bbbbb";
for($ascii=32;$ascii<=126;$ascii++) {
$char=chr($ascii);
$charcharcharcharchar=$char . $char . $char . $char . $char;
$charchar=$char . $char;
if(strpos($str, $charcharcharcharchar) !== FALSE) { $str=str_replace($charcharcharcharchar, $charchar, $str); }
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.