Differenza tra \ w e \ b caratteri meta espressione regolari

Qualcuno può spiegare la differenza tra i \w espressione regolare \w e \b ?

Ho capito che entrambi questi meta-caratteri sono usati per i confini delle parole. Oltre a questo, quale meta-carattere è efficace per i contenuti multilingue?

Il metacarattere \b è un’ancora come il segno di omissione e il segno del dollaro. Corrisponde a una posizione chiamata “limite di parole” . Questa partita è a lunghezza zero.

Ci sono tre diverse posizioni che si qualificano come limiti di parole:

  • Prima del primo carattere nella stringa, se il primo carattere è un carattere di parola.
  • Dopo l’ultimo carattere nella stringa, se l’ultimo carattere è un carattere di parola.
  • Tra due caratteri nella stringa, dove uno è un carattere di parola e l’altro non è un carattere di parola.

In parole semplici: \b consente di eseguire una ricerca “solo parole intere” utilizzando un’espressione regolare nella forma di \bword\b . Un “carattere parola” è un carattere che può essere utilizzato per formare parole. Tutti i caratteri che non sono “caratteri parola” sono “caratteri non parole” .

In tutti i gusti, i caratteri [a-zA-Z0-9_] sono caratteri di parole. Questi sono anche abbinati alla class di caratteri a mano corta \w . Gli aromi che mostrano “ascii” per i confini delle parole nel confronto di sapori riconoscono solo questi come caratteri di parole.

\w sta per “carattere parola” , in genere [A-Za-z0-9_] . Notare l’inclusione del trattino basso e delle cifre.

\B è la versione negata di \b . \B corrisponde a tutte le posizioni in cui \b non lo fa. In effetti, \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 personaggio 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 corrisponde a , b , c , d , e ed f in "abc def"
\b corrisponde alla posizione (larghezza zero) prima di a , dopo c , prima di d , e dopo f in "abc def"

Vedi: http://www.regular-expressions.info/reference.html/

@ Marender, probabilmente intendevi la differenza tra \W (invece di \w ) e \b . In caso contrario, sarei d’accordo con @BoltClock e @jwismar sopra. Altrimenti continua a leggere.

\W corrisponde a qualsiasi carattere non di parole e quindi è facile provare a utilizzarlo per abbinare i confini delle parole. Il problema è che non corrisponderà all’inizio o alla fine di una linea. \b è più adatto per far corrispondere i confini delle parole in quanto corrisponderà anche all’inizio o alla fine di una linea. In parole povere (gli utenti più esperti possono correggermi qui) \b può essere pensato come (\W|^|$) . [Modifica: come @ Ωmega menziona sotto, \b è una corrispondenza di lunghezza zero quindi (\W|^|$) non è strettamente corretta, ma si spera che aiuti a spiegare la diff]

Esempio rapido: per la stringa Hello World Hello_ .+\W corrisponde a Hello_ (con lo spazio) ma non corrisponde a World . .+\b corrisponderebbe sia a Hello che a World .

 \b <= this is a word boundary. 

Corrisponde a una posizione seguita da un carattere di parola ma non preceduta da un carattere di parola o preceduta da un carattere di parola ma non seguita 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 regex utili per i principianti o semplicemente per bagnare il tuo appetito.

Ho trovato questo libro molto utile:

  • Mastering Regular Expressions di Jeffrey EF Friedl

\w non è un limite di parole, corrisponde a qualsiasi carattere di parola, inclusi i caratteri di sottolineatura: [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 una lingua all’altra.