-+  Associazione
-+  Documenti
 |-  Modern Perl
 |-  Bibliografia
 |-  Articoli
 |-  Talk
 |-  Perlfunc
 |-  F.A.Q.
 |-  F.A.Q. iclp
-+  Eventi
-+  Community
-+  Blog
-+  Link
Corso di Perl



 


indietro

[32] Come si possono togliere gli spazi dall'inizio/fine di una stringa?

(contributo di brian d foy)

Una sostituzione può farlo per voi. Per una singola linea, volete sostituire tutti gli spazi ad inizio/fine stringa con nulla. Potete farlo con un paio di sostituzioni.

	s/^\s+//;
	s/\s+$//;

Potete anche scriverlo come una singola sostituzione, ma anche se funziona, l'istruzione congiunta è più lenta di quelle separate. Tuttavia per voi questo potrebbe non avere importanza.

	s/^\s+|\s+$//g;

In questa espressione regolare, l'alternativa [|, NdT] effettua un match o all'inizio o alla fine della stringa dato che le ancore [^ e $, NdT] hanno una precedenza piEa<ugrave> bassa rispetto all'alternativa. Con l'opzione /g, la sostituzione effettua tutti i possibili match, dunque li ottiene entrambi. Ricordate, i ritorni a capo a fine linea trovano corrispondenza in \s+ e l'ancora $ può effettuare il match sulla parte fisica della fine della stringa, dunque anche il ritorno a capo scompare. Aggiungete semplicemente il ritorno a capo all'output, che ha l'ulteriore vantaggio di preservare le linee "vuote" (formate interamente da spazi) che verrebbero rimosse tutte dalla la parte ^\s+.

	while( <> )
		{
		s/^\s+|\s+$//g;
		print "$_\n";
		}

Per una stringa su più linee, potete applicare l'espressione regolae ad ogni linea logica della stringa aggiungendo l'opzione /m (che sta per "linee multiple"). Con l'opzione /m, $ effettua un match prima di un ritorno a capo interno e dunque non lo rimuove. Continua però a rimuovere il ritorno a capo alla fine della stringa.

	$stringa =~ s/^\s+|\s+$//gm;

Ricordate che le linee che consistono interamente di spazi spariranno, visto che la prima parte dell'alternativa può effettuare il match dell'intera stringa e sostituirla con nulla. Se servisse mantenere le linee vuote interne, dovreste fare un po' di lavoro in più. Invece di effettuare il match su ogni spazio (visto che questo include i ritorni a capo), effettuate il match semplicemente sull'altro spazio.

	$stringa =~ s/^[\t\f ]+|[\t\f ]+$//mg;

vedi in inglese

AUTORE E COPYRIGHT

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.

D:
Progetti e documenti in rilievo
Corso di Perl Progetto pod2it
D:
La ML di Perl.it
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!
D:
Annunci Google