(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
|