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.
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.
/*
@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;
}
Brak komentarzy
Dodaj własny komentarz