Сомневаюсь. что одной регуляркой такое можно сделать.
Полагаю нужно что-то вроде такого:
$str = "abababcdcdcdabab";
$parts = preg_split('/([a-z]{2})/u', $str, 0, PREG_SPLIT_DELIM_CAPTURE);
$parts = array_values(array_filter($parts));
$skip = 0;
$result = '';
foreach($parts as $id => $part) {
$next = isset($parts[$id+1]) ? $parts[$id+1] : false;
if ($part == $next) {
++$skip;
}
if ($skip == 2) {
$skip = 0;
continue;
}
$result .= $part;
}
echo $result;
На выходе получим: "ababcdcdabab".
Еще есть такой вариант:
$str = "abababababcdcdcdcdcdabab";
$parts = preg_split('/([a-z]{2})/u', $str, 0, PREG_SPLIT_DELIM_CAPTURE);
$parts = array_values(array_filter($parts));
$skip = 0;
$last = '';
$result = '';
foreach($parts as $id => $part) {
$next = isset($parts[$id+1]) ? $parts[$id+1] : false;
if ($part == $next) {
++$skip;
} else {
$skip = 0;
}
if ($skip >= 2) {
continue;
}
$result .= $part;
}
echo $result;
На выходе: "ababcdcdabab"