[21] Come rimuovo coppie consecutive di caratteri?
(contributo di brian d foy)
Potete usare l'operatore di sostituzione per trovare le coppie di caratteri
(oppure sequenze di caratteri) e sostituirli con una singola istanza. In questa
sostituzione, troviamo un carattere in (.). Le parentesi di cattura permettono
di riferirsi con la back-reference [riferimento a qualcosa di precedente, NdT] \1
al carattere corrispendente, e questo fatto si usa per imporre che tale carattere
sia seguito da un carattere uguale. Sostituiamo questa parte della stringa con il
carattere in $1.
s/(.)\1/$1/g;
Possiamo anche usare l'operatore di trasliettarazione, tr///. In questo
esempio, la parte con l'elenco di ricerca del nostro tr/// non contiene nulla.
Anche l'elenco di sostituzione non contiene nulla, dunque la traslitterazione
è quasi una non-operazione visto che non farà alcuna sostituzione
(o più esattamente, sostituisce un carattere con se stesso). Ad ogni modo,
l'opzione s schiaccia nella stringa i caratteri duplicati e consecutivi così
che un carattere non appaia due volte di fila.
my $str = 'Haarlem'; # nei Paesi Bassi
$str =~ tr///cs; # Ora Harlem, come a New York
Copyright (c) 1997, 1998, 1999, 2000, 2001 Tom Christiansen e Nathan
Torkington. Tutti i diritti riservati.
Questa documentazione è libera; puoi ridistribuirla e/o
modificarla secondo gli stessi termini applicati al Perl.
Indipendentemente dalle modalitè di distribuzione, tutti gli esempi di
codice in questo file sono rilasciati al pubblico dominio. Potete, e
siete incoraggiati a farlo, utilizzare il presente codice o qualunque
forma derivata da esso nei vostri programmi per divertimento o per profitto.
Un semplice commento nel codice che dia riconoscimento alle FAQ sarebbe cortese
ma non è obbligatorio.
mongers@perl.it è la lista ufficiale di Perl Mongers Italia per
porre quesiti di tipo tecnico, per rimanere aggiornato su meeting,
incontri, manifestazioni e novità su Perl.it. Iscriviti!