@Lavrov95

Regex, как оставить 2 символа если их больше 2 от друг друга?

Пример

abababcdcdcdabab

выход должен быть таким

ababcdcdcdabab
  • Вопрос задан
  • 39 просмотров
Пригласить эксперта
Ответы на вопрос 1
@rotarepmipoleved
Сомневаюсь. что одной регуляркой такое можно сделать.
Полагаю нужно что-то вроде такого:
$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"
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы