Estou lendo um livro sobre expressão regular e me deparei com este exemplo de \b
:
O gato espalhou sua comida por toda a sala.
Usando regex - \bcat\b
corresponderá à palavra, cat
mas não ao cat
in scattered
.
Para \B
o autor usa o seguinte exemplo:
Por favor, insira o ID de nove dígitos, pois
aparece na sua senha codificada por cores.
Usando \B-\B
correspondências de regex -
entre a palavra color - coded
. Por \b-\b
outro lado, usar corresponde a -
em nine-digit
e pass-key
.
Como é que no primeiro exemplo usamos \b
para separar cat
e no segundo usamos \B
para separar -
? Usar \b
no segundo exemplo faz o oposto do que fez antes.
Por favor, explique a diferença para mim.
EDIT: Além disso, alguém pode explicar com um novo exemplo?
-
não é considerado parte de uma palavra. Da mesma forma,!
não é parte de uma palavra. Então, novamente\b!\b
corresponde a "uunet! Iamold", mas não a "Uau! Você é." Você pode tentar isso em regexpal.com .\B matches the empty string not at the beginning or end of a word
\b
é um limite de palavra de largura zero. Especificamente:Exemplo:
.\b
jogosc
emabc
\B
é um limite de não palavra de largura zero. Especificamente:Exemplo:
\B.\B
jogosb
emabc
Consulte regular-expressions.info para mais informações excelentes de regex
fonte
string.match()
retorna apenas a primeira correspondência, a menos que você adicione o sinalizador globalg
:"abc def".match(/\b./g)
retorna['a', ' ', 'd']
Com um exemplo diferente:
Considere que esta é a string e o padrão a ser pesquisado é 'cat':
text = "catmania thiscat thiscatmaina";
Agora, definições,
'\ b' encontra / corresponde ao padrão no início ou no final de cada palavra.
'\ B' não encontra / corresponde ao padrão no início ou no final de cada palavra.
Casos Diferentes:
Caso 1: no início de cada palavra
result = text.replace(/\bcat/g, "ct");
Agora, o resultado é "ctmania thiscat thiscatmaina"
Caso 2: no final de cada palavra
result = text.replace(/cat\b/g, "ct");
Agora, o resultado é "catmania thisct thiscatmaina"
Caso 3: não no início
result = text.replace(/\Bcat/g, "ct");
Agora, o resultado é "catmania thisct thisctmaina"
Caso 4: não no final
result = text.replace(/cat\B/g, "ct");
Agora, o resultado é "ctmania thiscat thisctmaina"
Caso 5: nem começo nem fim
result = text.replace(/\Bcat\B/g, "ct");
Agora, o resultado é "catmania thiscat thisctmaina"
Espero que isto ajude :)
fonte
O metacaractere \ b é uma âncora como o circunflexo e o cifrão. Corresponde a uma posição chamada "limite de palavra". Esta correspondência tem comprimento zero.
Existem três posições diferentes que se qualificam como limites de palavras:
\ B é a versão negada de \ b . \ B corresponde em todas as posições onde \ b não. Efetivamente, \ B corresponde em qualquer posição entre dois caracteres de palavra, bem como em qualquer posição entre dois caracteres de não palavra.
Fonte: http://www.regular-expressions.info/wordboundaries.html
fonte
\b
corresponde a um limite de palavra.\B
corresponde a não limites de palavras e é equivalente a (graças a @Alan Moore pela correção!) . Ambos têm largura zero.[^\b]
(?!\b)
Consulte http://www.regular-expressions.info/wordboundaries.html para obter detalhes. O site é extremamente útil para muitas questões básicas de regex.
fonte
\B
não é equivalente a[^\b]
. Uma classe de caractere ([...]
ou[^...]
) consome exatamente um caractere, enquanto asserções de largura zero gostam\b
e\B
não consomem nada. Se você inserir\b
uma classe de caracteres, ela terá um significado completamente diferente:[\b]
corresponde a um backspace e[^\b]
corresponde a qualquer caractere, exceto um backspace.\B
é realmente equivalente a(?!\b)
.Vamos pegar uma string como:
Nota: O sublinhado (_) não é considerado um caractere especial neste caso.
/\bX\b/g
Deve começar e terminar com um caractere especial ou espaço em branco/\bX/g
Deve começar com um caractere especial ou espaço em branco/X\b/g
Deve terminar com um caractere especial ou espaço em branco/\BX\B/g
Não deve começar e não terminar com um caractere especial ou espaço em branco
/\BX/g
Não deve começar com um caractere especial ou espaço em branco/X\B/g
Não deve terminar com um caractere especial ou espaço em branco/\bX\B/g
Deve começar e não terminar com um caractere especial ou espaço em branco/\BX\b/g
Não deve começar e deve terminar com um caractere especial ou espaço em brancofonte
Fonte © Copyright RexEgg.com
Limite de palavras: \ b *
O limite de palavra \ b corresponde a posições em que um lado é um caractere de palavra (geralmente uma letra, dígito ou sublinhado - mas veja abaixo as variações entre os motores) e o outro lado não é um caractere de palavra (por exemplo, pode ser o início de a string ou um caractere de espaço).
A regex \ bcat \ b corresponderia, portanto, a gato em um gato preto, mas não em catatônico, tomcat ou certificado. Removendo um dos limites, \ bcat corresponderia a gato em bagre e cat \ b corresponderia a gato em tomcat, mas não vice-versa. Ambos, é claro, combinariam com o gato por conta própria.
Limite de não uma palavra: \ B
\ B corresponde a todas as posições onde \ b não corresponde. Portanto, corresponde a:
✽ Quando nenhum lado é um caractere de palavra, por exemplo, em qualquer posição na string $ = (@ -% ++) (incluindo o início e o fim da string)
✽ Quando ambos os lados são um caractere de palavra, por exemplo, entre H e i em Hi!
Isso pode não parecer muito útil, mas às vezes \ B é exatamente o que você deseja. Por exemplo,
✽ \ Bcat \ B encontrará cat totalmente rodeado por caracteres de palavras, como no certificado, mas não sozinho nem no início ou no final das palavras.
✽ cat \ B encontrará gato tanto no certificado quanto no peixe-gato, mas não no gato nem sozinho.
✽ \ Bcat encontrará gato tanto no certificado quanto no tomcat, mas não no bagre nem sozinho.
✽ \ Bcat | cat \ B encontrará o gato em uma situação incorporada, por exemplo, no certificado, peixe-gato ou tomcat, mas não por conta própria.
fonte
\ b é usado como limite de palavra
Encontre todos os "gatos" na palavra acima
sem \ b
com B
fonte
\B
se não\b
, por exemplo, negativa\b
pass-key
aqui não há nenhum limite de palavra ao lado-
então corresponde\B
ao seu primeiro exemplo há limite de palavra ao lado de gato, então corresponde\b
regras semelhantes se aplicam a outros também.
\W
é negativo de\w
\UPPER CASE
é negativo de\LOWER CASE
fonte