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



 


indietro

[17] Perché non mi funzionano le ricerche del limite di una parola effettuate con \b?

(contributo di brian d foy)

Assicuratevi di conoscere cosa significhi davvero \b: è il confine tra un carattere di una parola, \w, e qualcosa che non è il caratter di una parola. Questa cosa che non è il carattere di una parola potrebbe essere \W ma può essere anche l'inizio o la fine della stringa.

Non è il confine tra spazi e non-spazi, e non sono quelle cose tra le parole che usiamo per creare frasi.

Con il gergo delle espressioni regolari, un confine di parola (\b) è una "zero width assertion" [asserzione di ampiezza zero, NdT], che sta a significare che non rappresenta un carattere nella stringa ma una condizione in una certa posizione.

Per l'espressione regolare, /\bPerl\b/, ci deve essere un confine di parola prima della "P" e dopo la "l". Fino a che qualcosa di diverso da un carattere di parola precede la "P" e segue la "l", il pattern effetuerà il match. Queste stringhe effettuano il match con /\bPerl\b/.

	"Perl"    # nessun carattere di parola prima di P o dopo l
	"Perl "   # come il precedente (lo spazio non e` un carattere di parola)
	"'Perl'"  # il carattere ' non e` un carattere di parola)
	"Perl's"  # nessun carattere di parola prima di P, nessun carattere di parola dopo "l"

Queste stringhe non effettuano il match con /\bPerl\b/.

	"Perl_"   # _ e` un carattere di parola!
	"Perler"  # nessun carattere di parola prima di P ma uno dopo l

Tuttavia non dovete usare \b per effettuare il match di parole. Potete cercare i caratteri non-parola con ai lati dei caratterei di parola. Queste stringhe effettuano il match /\b'\b/.

	"don't"   # il carattere ' ha ai lati "n" e "t"
	"qep'a'"  # il carattere ' ha ai lati "p" e "a"

Queste stringhe effettueranno il match con /\b'\b/.

	"foo'"    # non c'e` alcun carattere di parola dopo la non-parola '

Per specificare che non ci dovrebbe essere un confine di parola, potete anche usare il complementare di \b, \B.

Nel patter /\Bam\B/, ci deve essere un carattere di parola prima della "a" e dopo la "m". Queste stringhe effettueranno il match con /\Bam\B/:

	"llama"   # "am" ha ai lati dei caratteri di parola
	"Samuel"  # stessa cosa
	
Queste non stringhe effettueranno il match con /\Bam\B/
	"Sam"      # non c'e` confine di parola prima di "a", ma ce n'e` uno dopo "m"
	"I am Sam" # "am" ha ai lati dei caratteri di non-parola

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