Diferença entre os meta-caracteres da expressão regular \ w e \ b

Alguém pode explicar a diferença entre \w e \b metacaracteres de expressões regulares?

É meu entendimento que ambos os meta-caracteres são usados ​​para limites de palavras. Além disso, qual meta-caráter é eficiente para conteúdo multilíngue?

O metacaractere \b é uma âncora como o cursor e o cifrão. Ele corresponde a uma posição que é chamada de “limite de palavra” . Essa correspondência é de comprimento zero.

Existem três posições diferentes que se qualificam como limites de palavras:

  • Antes do primeiro caractere na string, se o primeiro caractere for um caractere de palavra.
  • Após o último caractere na string, se o último caractere for um caractere de palavra.
  • Entre dois caracteres na string, onde um é um caractere de palavra e o outro não é um caractere de palavra.

Simplificando: \b permite que você execute uma pesquisa “somente palavras inteiras” usando uma expressão regular na forma de \bword\b . Um “caractere de palavra” é um caractere que pode ser usado para formar palavras. Todos os caracteres que não são “caracteres da palavra” são caracteres que não são de palavras” .

Em todos os sabores, os caracteres [a-zA-Z0-9_] são caracteres de palavras. Eles também são correspondidos pela class de caractere abreviada \w . Sabores mostrando “ascii” para limites de palavras na comparação de sabores reconhecem apenas estes como caracteres de palavras.

\w significa “caractere de palavra” , geralmente [A-Za-z0-9_] . Observe a inclusão do sublinhado e dos dígitos.

\B é a versão negada de \b . \B corresponde a todas as posições em que \b não. Efetivamente, \B combina em qualquer posição entre dois caracteres de palavras, assim como em qualquer posição entre dois caracteres não-word.

\W é a abreviação de [^\w] , a versão negada de \w .

\w corresponde a um caractere de palavra. \b é uma correspondência de largura zero que corresponde a um caractere de posição que tenha um caractere de palavra de um lado e algo que não seja um caractere de palavra do outro. (Exemplos de coisas que não são caracteres de palavras incluem espaço em branco, início e fim da string, etc.)

\w corresponde a , b , c , d , e , f em "abc def"
\b combina com a posição (largura zero) antes de a , depois de c , antes de d e depois de f em "abc def"

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

@Mahender, você provavelmente quis dizer a diferença entre \W (em vez de \w ) e \b . Se não, então eu concordaria com @BoltClock e @jwismar acima. Caso contrário, continue lendo.

\W corresponderia a qualquer caractere não pertencente à palavra e, portanto, é fácil tentar usá-lo para corresponder aos limites das palavras. O problema é que não corresponderá ao início ou ao final de uma linha. \b é mais adequado para a correspondência de limites de palavras, pois também corresponderá ao início ou fim de uma linha. Grosseiramente falando (usuários mais experientes podem me corrigir aqui) \b pode ser pensado como (\W|^|$) . [Edit: como @ Ωmega menciona abaixo, \b é uma correspondência de comprimento zero por isso (\W|^|$) não está estritamente correto, mas esperamos que ajude a explicar o diff]

Exemplo rápido: Para a string Hello World .+\W corresponderia a Hello_ (com o espaço), mas não corresponderá a World . .+\b corresponderia ao Hello e ao World .

 \b < = this is a word boundary. 

Corresponde a uma posição que é seguida por um caractere de palavra, mas não precedida por um caractere de palavra, ou que é precedida por um caractere de palavra, mas não seguida por um caractere de palavra.

 \w < = stands for "word character". 

Ele sempre corresponde aos caracteres ASCII [A-Za-z0-9_]

Existe algo específico que você está tentando combinar?

Alguns sites regex úteis para iniciantes ou apenas para molhar o apetite.

Eu achei este livro muito útil:

  • Dominando Expressões Regulares por Jeffrey EF Friedl

\w não é um limite de palavra, corresponde a qualquer caractere de palavra, incluindo sublinhados: [a-zA-Z0-9_] . \b é um limite de palavra, isto é, corresponde à posição entre uma palavra e um caractere não alfanumérico: \W ou [^\w] .

Essas implementações podem variar de idioma para idioma embora.