168 votes

Différence entre \w y \b expression régulière métacaractères

Quelqu'un peut-il expliquer la différence entre \b y \w les métacaractères des expressions régulières ? Je crois comprendre que ces deux métacaractères sont utilisés pour délimiter les mots. Par ailleurs, quel métacaractère est le plus efficace pour les contenus multilingues ?

13 votes

\w représente un mot caractère , tandis que \b représente un mot frontière entre un caractère verbal et un caractère non verbal. Ce n'est pas la même chose.

301voto

Ωmega Points 17702

Le métacaractère \b est une ancre comme le caret et le signe du dollar. Il correspond à une position appelée "limite du 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 l'option dernier caractère est un mot.
  • Entre deux personnages de la dont l'un est un caractère de mot et l'autre n'est pas un caractère de mot.

C'est simple : \b vous permet d'effectuer une "mots entiers uniquement" recherche à l'aide d'une expression régulière sous la forme \bword\b . A "caractère du mot" est un caractère qui peut être utilisé pour former des mots. Tous les caractères qui ne sont pas "caractères de mots" sont "caractères non verbaux" .

Dans toutes les saveurs, les personnages [a-zA-Z0-9_] sont des caractères verbaux. Ceux-ci sont également associés à la classe de caractères abrégés \w . Arômes montrant "ascii" pour les limites de mots dans la comparaison de saveurs ne reconnaissent que celles-ci comme des caractères de mots.

\w signifie "caractère du mot" , le plus souvent [A-Za-z0-9_] . Remarquez l'inclusion du trait de soulignement et des chiffres.

\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.

\W est l'abréviation de [^\w] , la version niée de \w .

25voto

jwismar Points 6295

\w correspond à un caractère de mot. \b est une correspondance de largeur nulle qui correspond à un caractère de position ayant un caractère de mot d'un côté, et quelque chose qui n'est pas un caractère de mot de l'autre. (Les espaces blancs, le début et la fin de la chaîne de caractères, etc. sont des exemples d'éléments qui ne sont pas des caractères de mot.)

\w correspondances a , b , c , d , e y f en "abc def"
\b correspond à la position (de largeur nulle) avant a , après c , avant d et après f en "abc def"

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

3 votes

Il est plus correct de dire qu'il s'agit de la limite entre un caractère de mot et un caractère qui n'en est pas un, car elle correspond également à la limite entre un caractère de mot et le début ou la fin d'une chaîne de caractères si ce caractère se trouve au début/à la fin de la chaîne de caractères.

5 votes

Ce n'est pas encore tout à fait correct. \b une assertion de largeur nulle ; elle ne correspond pas à une assertion de type caractère il correspond à un position .

14voto

mtariq Points 165

@Mahender, vous vouliez probablement parler de la différence entre \W (au lieu de \w ) et \b . Si ce n'est pas le cas, je suis d'accord avec @BoltClock et @jwismar ci-dessus. Sinon, continuez à lire.

\W correspondrait à n'importe quel caractère autre qu'un mot et il est donc facile d'essayer de l'utiliser pour correspondre aux limites d'un mot. Le problème est qu'il ne correspond pas au début ou à la fin d'une ligne. \b est plus adapté à la recherche de limites de mots, car il correspond également au début ou à la fin d'une ligne. Grosso modo (les utilisateurs plus expérimentés peuvent me corriger) \b peut être considéré comme (\W|^|$) . [Edit : comme @mega le mentionne ci-dessous, \b est une correspondance de longueur nulle, donc (\W|^|$) n'est pas tout à fait correcte, mais j'espère qu'elle permet d'expliquer la différence].

Exemple rapide : Pour la chaîne Hello World , .+\W correspondrait à Hello_ (avec l'espace) mais ne correspondra pas à World . .+\b correspondrait à la fois à Hello y World .

0 votes

Je ne suis pas d'accord \b qui a la même signification que (\W|^|$) puisque (\W|^|$) inclura le caractère non-mot dans le résultat de la recherche. Vous pouvez vérifier ce fait ici => regexr.com/3qf98 .

0 votes

\b signifie pour moi la même chose que (?<=\W|^|$) lorsqu'il est utilisé devant un motif et (?=\W|^|$) lorsqu'il est utilisé après un motif. Vous pouvez vérifier de quoi je parle ici => regexr.com/3qf9h . Il suffit de comparer avec le résultat de \b ancres ici => regexr.com/3qf9t

7voto

james emanon Points 2131
\b <= this is a word boundary.

Correspond à une position suivie d'un mot mais non précédée d'un mot, ou précédée d'un mot mais non suivie d'un mot.

\w <= stands for "word character". 

Il correspond toujours aux caractères ASCII [A-Za-z0-9_]

Y a-t-il quelque chose de spécifique que vous essayez de faire correspondre ?

Quelques sites web utiles sur les expressions rationnelles pour les débutants ou simplement pour vous mettre en appétit.

J'ai trouvé ce livre très utile :

5 votes

C'est une bonne réponse, mais il est utile de rappeler que \w n'est pas toujours équivalent aux caractères ASCII [A-Za-z0-9_] -- il correspondra également aux points de code alphanumériques Unicode, et peut correspondre aux caractères ISO-Latin-1 de 8 bits si la locale est définie de manière appropriée.

2voto

Julián Urbano Points 4835

\w es no une limite de mot, il correspond à n'importe quel caractère de mot, y compris les caractères de soulignement : [a-zA-Z0-9_] . \b est une limite de mot, c'est-à-dire qu'il correspond à la position entre un mot et un caractère non alphanumérique : \W o [^\w] .

Ces implémentations peuvent toutefois varier d'une langue à l'autre.

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