2009
09.20

Pewnie nie jedna osoba już się z tym męczyła i skończyła z funkcją usuwającą tylko wielokrotne spacje. Mi takie rozwiązanie nie pasowało. Potrzebowałem funkcji, która niezależnie od kodowania usunie z ciągu wszystkie powtarzające sie znaki. Przekopując internet wzdłuż i wszerz dogrzebałem się w końcu do pewnego artykułu opisującego możliwości wyrażeń regularnych w PHP. Otóż nawiasy okrągłe w wyrażeniach regularnych poza grupowaniem elementów tworzą tzw. referencję wsteczną (ang. backreference, o ile można to w ogóle przetłumaczyć). Referencje te można następnie „wywoływać” w dalszej części wyrażenia regularnego.

([a-c])x\1x\1

Powyższe wyrażenie pasuje zarówno do axaxa jak i bxbxb oraz cxcxc.
Dodatkowo referencję wsteczną możemy oznaczyć identyfikatorem (ang. named backreference). Identyfikator pozwala nam odwołać się do wybranej referencji przy pomocy nadanej nazwy, a nie liczb, które przy zmianie treści wyrażenia regularnego mogą stać się nieaktualne.

Poniższa funkcja pozwala na usunięcie wszystkich powtarzających się jeden po drugim znaków bądź jednego wybranego, powtarzającego się znaku.

function strip_multiplied_characters ($str,$character=null) {
/*
@author: Raisen
@site: http://www.raisen.pl/
@e-mail: kontakt[at]raisen[dot-here]pl
*/

    if (is_null($character) && is_string($str) && strlen($str)>0) {
        return preg_replace('/(?<znak>.)\k<znak>+/',"$1",$str);
    }

    if (is_string($character) && strlen($character)==1 && is_string($str) && strlen($str)>0) {
        return preg_replace('/(?<znak>'.$character.')\k<znak>+/',"$1",$str);
    }

    return false;
}

Podobne artykuły:

Brak komentarzy

Dodaj własny komentarz