153 votes

Différence entre \b y \B dans les expressions rationnelles

Je suis en train de lire un livre sur les expressions régulières et je suis tombé sur cet exemple de \b :

Le chat a éparpillé sa nourriture dans toute la pièce.

Utilisation des expressions rationnelles - \bcat\b correspondra au mot cat mais pas le cat en scattered .

Para \B l'auteur utilise l'exemple suivant :

Veuillez saisir l'identifiant à neuf chiffres tel qu'il est.

apparaît sur votre code couleur.

Utilisation des expressions rationnelles \B-\B correspondances - entre le mot color - coded . En utilisant \b-\b d'autre part, correspond à la - en nine-digit y pass-key .

Comment se fait-il que dans le premier exemple, nous utilisions \b séparer cat et dans la deuxième utilisation \B séparer - ? Utilisation \b dans le deuxième exemple fait le contraire de ce qu'il a fait précédemment.

Veuillez m'expliquer la différence.

EDIT : Aussi, quelqu'un peut-il expliquer avec un nouvel exemple ?

136voto

andrewdski Points 2246

La confusion provient de votre façon de penser \b correspond aux espaces (probablement parce que "b" suggère "blanc").

\b correspond à la chaîne vide à l'adresse début ou fin d'un mot . \B correspond à la chaîne vide qui ne se trouve ni au début ni à la fin d'un mot. La clé ici est que "-" ne fait pas partie d'un mot. En d'autres termes, le mot "-" ne fait pas partie d'un mot. <left>-<right> correspondances \b-\b parce qu'il y a des limites de mots de part et d'autre de la - . D'autre part, pour les <left> - <right> (notez les espaces), il n'y a pas de limites de mots de part et d'autre du tiret. Les limites des mots sont situées un espace plus loin à gauche et à droite.

D'autre part, lors de la recherche de \bcat\b les limites des mots se comportent de manière plus intuitive, et il correspond à " cat " comme prévu.

97voto

Bohemian Points 134107

\b est une frontière de mot de largeur nulle. En particulier :

Correspond à la position entre un mot et un caractère (tout ce qui correspond à \w ) et un caractère autre qu'un mot (tout ce qui correspond à [^ \w ] ou \W ) ainsi qu'au début et/ou à la fin de la chaîne si le premier et/ou le dernier caractère de la chaîne sont des caractères verbaux.

Exemple : .\b correspondances c en abc

\B est une frontière de non-mot de largeur nulle. En particulier :

Correspond à la position entre deux caractères de mots (c.-à-d. la position entre \w\w ) ainsi qu'à la position entre deux caractères non-mots (c'est-à-dire \W\W ).

Exemple : \B.\B correspondances b en abc

Voir expressions-regulières.info pour plus d'informations sur les expressions rationnelles

61voto

Agam Points 871

Avec un autre exemple :

Considérons que la chaîne et le motif à rechercher sont "cat" :

text = "catmania thiscat thiscatmaina";

Définitions actuelles,

' \b ' trouve ou fait correspondre le motif au début ou à la fin de chaque mot.

' \B ' ne trouve pas/ne fait pas correspondre le modèle au début ou à la fin de chaque mot.

Différents cas :

Cas 1 : Au début de chaque mot

result = text.replace(/\bcat/g, "ct");

Le résultat est maintenant "ctmania thiscat thiscatmaina".

Cas 2 : à la fin de chaque mot

result = text.replace(/cat\b/g, "ct");

Le résultat est maintenant "catmania thisct thiscatmaina".

Cas 3 : Pas au début

result = text.replace(/\Bcat/g, "ct");

Le résultat est maintenant "catmania thisct thisctmaina".

Cas 4 : Pas en fin de compte

result = text.replace(/cat\B/g, "ct");

Le résultat est maintenant "ctmania thiscat thisctmaina".

Cas 5 : Ni début ni fin

result = text.replace(/\Bcat\B/g, "ct");

Maintenant, le résultat est "catmania thiscat thisctmaina"

J'espère que cela vous aidera :)

11voto

Daniel Hilgarth Points 90722

Le métacaractère \b est une ancre comme le caret et le signe du dollar. Il correspond à une position appelée "limite de mot". Cette correspondance est de longueur nulle.

Il y a trois positions différentes qui peuvent être considérées comme des limites de mots :

  • Avant le premier caractère de la chaîne, si le premier caractère est un mot.
  • Après le dernier caractère de la chaîne, si le dernier caractère est un mot.
  • Entre deux caractères de la chaîne, dont l'un est un caractère verbal et l'autre n'est pas un caractère verbal.

\B est la version inversée de \b . \B correspond à chaque position où \b ne le fait pas. De manière efficace, \B correspond à n'importe quelle position entre deux caractères verbaux ainsi qu'à n'importe quelle position entre deux caractères non verbaux.

Source : http://www.regular-expressions.info/wordboundaries.html

6voto

Ganesh M S Points 173

Source Copyright RexEgg.com

Limite du mot : \b *

Le mot frontière \b correspond aux positions dont l'un des côtés est un caractère verbal (généralement une lettre, un chiffre ou un trait de soulignement, mais voir ci-dessous les variations d'un moteur à l'autre) et dont l'autre côté n'est pas un caractère verbal (par exemple, il peut s'agir du début de la chaîne ou d'un caractère d'espace).

L'expression rationnelle \bcat\b correspondrait donc à chat dans un chat noir, mais pas à catatonique, matou ou certificat. Suppression d'une des limites, \bcat correspondrait à cat dans catfish, et cat \b correspondrait à cat dans tomcat, mais pas l'inverse. Les deux, bien sûr, correspondraient à cat seul.

Il n'y a pas de frontière entre les mots : \B

\B correspond à toutes les positions où \b ne correspond pas. Par conséquent, il correspond :

✽ Lorsqu'aucun des deux côtés n'est un caractère de mot, par exemple à n'importe quelle position dans la chaîne $=(@-%++) (y compris au début et à la fin de la chaîne).

✽ Lorsque les deux côtés sont un caractère de mot, par exemple entre le H et le i dans Hi !

Cela ne semble pas très utile, mais parfois \B est exactement ce que vous voulez. Par exemple,

✽ \Bcat\B trouvera chat entièrement entouré de caractères de mots, comme dans certificat, mais ni seul, ni au début ou à la fin des mots.

✽ chat \B trouvera cat à la fois dans certificate et catfish, mais ni dans tomcat ni seul.

✽ \Bcat trouvera cat dans certificate et tomcat, mais ni dans catfish ni seul.

✽ \Bcat |cat \B trouvera cat dans une situation intégrée, par exemple dans certificate, catfish ou tomcat, mais pas seul.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X