Alguém pode explicar a diferença entre \b
e \w
metacaracteres de expressão regular? Entendo que esses dois metacaracteres são usados para limites de palavras. Além disso, qual meta caractere é eficiente para conteúdo multilíngue?
142
\w
representa um caractere de palavra , enquanto\b
representa um limite de palavra entre um caractere de palavra e um caractere que não é uma palavra. Eles não são a mesma coisa.Respostas:
O metacaractere
\b
é uma âncora como o sinal de intercalação e o cifrão. Corresponde em uma posição chamada "limite de palavras" . Esta partida é de comprimento zero.Existem três posições diferentes que se qualificam como limites de palavras:
Simplificando:
\b
permite realizar uma pesquisa "apenas 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 de palavras" 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 classe de caracteres de mão curta\w
. Os sabores que mostram "ascii" para os limites de palavras na comparação de sabores reconhecem apenas esses caracteres como caracteres de palavra.\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
combina em todas as posições em\b
que não. Efetivamente,\B
corresponde a qualquer posição entre dois caracteres de palavra e em qualquer posição entre dois caracteres que não sejam de palavra.\W
é a abreviação de[^\w]
, a versão negada de\w
.fonte
\w
corresponde a um caractere de palavra.\b
é uma correspondência de largura zero que corresponde a um caractere de posição que possui um caractere de palavra de um lado e algo que não é um caractere de palavra do outro lado. (Exemplos de coisas que não são caracteres de palavras incluem espaço em branco, início e fim da string etc.)\w
partidasa
,b
,c
,d
,e
, ef
em"abc def"
\b
jogos a (de largura zero) posição antes dea
, apósc
, antesd
, e depoisf
em"abc def"
Veja: http://www.regular-expressions.info/reference.html/
fonte
\b
uma afirmação de largura zero; não corresponde a um personagem , corresponde a uma posição .@ Mahender, você provavelmente quis dizer a diferença entre
\W
(em vez de\w
) e\b
. Caso contrário, eu concordo com @BoltClock e @jwismar acima. Caso contrário, continue lendo.\W
corresponderia a qualquer caractere que não seja palavra e, portanto, é fácil tentar usá-lo para corresponder aos limites das palavras. O problema é que ele não corresponderá ao início ou ao final de uma linha.\b
é mais adequado para corresponder aos limites das palavras, pois também corresponderá ao início ou ao final de uma linha. Grosso modo (usuários mais experientes podem me corrigir aqui)\b
pode ser considerado como(\W|^|$)
. [Editar: como @ Ωmega menciona abaixo,\b
é uma correspondência de comprimento zero, portanto(\W|^|$)
não é estritamente correta, mas espero que ajude a explicar a diferença]Exemplo rápido: para a sequência
Hello World
,.+\W
corresponderiaHello_
(com o espaço), mas não corresponderáWorld
..+\b
corresponderia a ambosHello
eWorld
.fonte
\b
significar o mesmo que(\W|^|$)
, pois(\W|^|$)
incluirá o caractere que não é palavra dentro do resultado correspondente. Você pode verificar esse fato aqui => regexr.com/3qf98 .\b
para mim, significa o mesmo que(?<=\W|^|$)
quando usado antes de um padrão e(?=\W|^|$)
quando usado depois de um padrão. Você pode conferir o que estou falando aqui => regexr.com/3qf9h . Basta comparar com o resultado das\b
âncoras aqui => regexr.com/3qf9tCorresponde 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.
Sempre corresponde aos caracteres ASCII [A-Za-z0-9_]
Existe algo específico que você está tentando corresponder?
Alguns sites úteis sobre regex para iniciantes ou apenas para diminuir o apetite.
Achei este livro muito útil:
fonte
\w
nem sempre é equivalente aos caracteres ASCII[A-Za-z0-9_]
- ele também corresponderá aos pontos de código alfanuméricos Unicode e poderá corresponder aos caracteres ISO-Latin-1 de 8 bits se o código do idioma estiver definido adequadamente .\w
é não um limite de palavra, ele corresponde a qualquer caractere de palavra, incluindo sublinhados:[a-zA-Z0-9_]
.\b
é um limite de palavras, ou seja, 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.
fonte