Risposte:
Il metacarattere \b
è un'ancora come il cursore e il simbolo del dollaro. Corrisponde a una posizione che si chiama "limite di parola" . Questa partita ha lunghezza zero.
Esistono tre diverse posizioni che si qualificano come limiti di parole:
In poche parole: \b
consente di eseguire una ricerca "solo parole intere" utilizzando un'espressione regolare sotto forma di \bword\b
. Un "carattere parola" è un carattere che può essere utilizzato per formare parole. Tutti i caratteri che non sono "caratteri di parole" sono "caratteri non di parole" .
In tutti i sensi, i personaggi [a-zA-Z0-9_]
sono caratteri di parole. Questi sono anche abbinati alla classe di caratteri a mano corta \w
. I sapori che mostrano "ascii" per i confini delle parole nel confronto dei sapori riconoscono solo questi come caratteri di parole.
\w
sta per "carattere parola" , di solito [A-Za-z0-9_]
. Si noti l'inclusione del carattere di sottolineatura e delle cifre.
\B
è la versione negata di \b
. \B
corrisponde in ogni posizione dove \b
non lo fa. Effettivamente, \B
corrisponde in qualsiasi posizione tra due caratteri di parole e in qualsiasi posizione tra due caratteri non di parole.
\W
è l'abbreviazione di [^\w]
, la versione negata di \w
.
\w
corrisponde a un carattere di parola. \b
è una corrispondenza di larghezza zero che corrisponde a un carattere di posizione che ha un carattere di parola su un lato e qualcosa che non è un carattere di parola sull'altro. (Esempi di cose che non sono caratteri di parole includono spazi bianchi, inizio e fine della stringa, ecc.)
\w
partite a
, b
, c
, d
, e
, e f
in "abc def"
\b
partite posizione (larghezza zero) prima a
, dopo c
, prima d
e dopo f
in"abc def"
\b
un'asserzione di larghezza zero; non corrisponde a un personaggio , corrisponde a una posizione .
@Mahender, probabilmente intendevi la differenza tra \W
(anziché \w
) e \b
. In caso contrario, sarei d'accordo con @BoltClock e @jwismar sopra. Altrimenti continua a leggere.
\W
corrisponderebbe a qualsiasi carattere non verbale ed è quindi facile provare a usarlo per abbinare i confini delle parole. Il problema è che non corrisponderà all'inizio o alla fine di una riga. \b
è più adatto per abbinare i confini delle parole in quanto corrisponderà anche all'inizio o alla fine di una riga. In parole povere (gli utenti più esperti possono correggermi qui) si \b
può pensare come (\W|^|$)
. [Modifica: come @ Ωmega menziona di seguito, \b
è una corrispondenza di lunghezza zero quindi (\W|^|$)
non è strettamente corretta, ma si spera che aiuti a spiegare il diff]
Esempio rapido: per la stringa Hello World
, .+\W
corrisponderebbe Hello_
(con lo spazio) ma non corrisponderà World
. .+\b
corrisponderebbe a entrambi Hello
e World
.
\b
significato come (\W|^|$)
, poiché (\W|^|$)
includerà il carattere non verbale all'interno del risultato della corrispondenza. Puoi verificare questo fatto qui => regexr.com/3qf98 .
\b
per me, significa lo stesso di (?<=\W|^|$)
quando usato prima di un motivo e (?=\W|^|$)
quando usato dopo un motivo. Puoi controllare di cosa sto parlando qui => regexr.com/3qf9h . Basta confrontare con il risultato delle \b
ancore proprio qui => regexr.com/3qf9t
\b <= this is a word boundary.
Corrisponde a una posizione seguita da un carattere di parola ma non preceduto da un carattere di parola o che è preceduto da un carattere di parola ma non seguito da un carattere di parola.
\w <= stands for "word character".
Corrisponde sempre ai caratteri ASCII [A-Za-z0-9_]
C'è qualcosa di specifico che stai cercando di abbinare?
Alcuni utili siti web regex per principianti o semplicemente per inumidire l'appetito.
Ho trovato questo un libro molto utile:
\w
non è sempre equivalente ai caratteri ASCII [A-Za-z0-9_]
: corrisponderà anche a punti di codice Unicode alfanumerici e potrebbe corrispondere a caratteri ISO-Latin-1 a 8 bit se l'impostazione internazionale è impostata in modo appropriato .
\w
è non è un confine di parola, corrisponde a qualsiasi carattere di parola, tra cui sottolineature: [a-zA-Z0-9_]
. \b
è un limite di parole, ovvero corrisponde alla posizione tra una parola e un carattere non alfanumerico: \W
o [^\w]
.
Queste implementazioni possono tuttavia variare da lingua a lingua.
\w
rappresenta un carattere parola , mentre\b
rappresenta un confine tra una parola carattere e una non parola. Non sono la stessa cosa.