web-dev-qa-db-fra.com

Différence entre les méta-caractères des expressions régulières \ w et \ b

Quelqu'un peut-il expliquer la différence entre les méta-caractères d'expression régulière \w et \b?

Je crois comprendre que ces deux méta-caractères sont utilisés pour les limites de Word. En dehors de cela, quel méta-caractère est efficace pour un contenu multilingue?

132
Mahender

Le métacaractère \b est une ancre comme le caret et le signe dollar. Il correspond à une position appelée "limite de mot". Ce match est de longueur zéro.

Il existe trois positions différentes qualifiées de limites de Word:

  • Avant le premier caractère de la chaîne, si le premier caractère est un caractère Word.
  • Après le dernier caractère de la chaîne, si le dernier caractère est un caractère Word.
  • Entre deux caractères dans la chaîne, où l’un est un caractère Word et l’autre n’est pas un caractère Word.

En termes simples: \b vous permet d’effectuer une recherche "mots entiers uniquement" en utilisant une expression régulière sous la forme de \bword\b. Un "caractère de mot" est un caractère qui peut être utilisé pour former des mots. Tous les caractères qui ne sont pas "Caractères Word" sont "Caractères autres que Word".

Dans tous les types, les caractères [a-zA-Z0-9_] sont des caractères Word. Celles-ci sont également associées à la classe de caractères abrégés \w. Les arômes indiquant "ascii" pour les limites de mots dans la comparaison des arômes ne les reconnaissent que comme des caractères Word.

\w signifie "Caractère Word", généralement [A-Za-z0-9_]. Notez l'inclusion du trait de soulignement et des chiffres.

\B est la version refusée de \b. \B correspond à chaque position où \b ne le fait pas. En effet, \B correspond à n'importe quelle position entre deux caractères Word, ainsi qu'à n'importe quelle position entre deux caractères autres que Word.

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

239
Ωmega

\w correspond à un caractère Word. \b est une correspondance de largeur zéro qui correspond à un caractère de position comportant un caractère Word d'un côté et quelque chose qui n'est pas un caractère Word de l'autre. (Les exemples de choses qui ne sont pas des caractères Word incluent les espaces, le début et la fin de la chaîne, etc.)

\w correspond à a, b, c, d, e et f dans "abc def".
\b correspond à la position (largeur zéro) avant a, après c, avant d et après f dans "abc def"

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

20
jwismar

@Mahender, vous vouliez probablement faire la différence entre \W (au lieu de \w) et \b. Si non, alors je serais d'accord avec @BoltClock et @jwismar ci-dessus. Sinon, continuez à lire.

\W correspond à tout caractère autre que Word. Il est donc facile d'essayer de l'utiliser pour faire correspondre les limites de Word. Le problème est que cela ne correspondra pas au début ou à la fin d'une ligne. \b convient mieux à la correspondance des limites de Word, car il correspond également au début ou à la fin d'une ligne. Grosso modo (les utilisateurs plus expérimentés peuvent me corriger ici) \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 strictement correct, mais aide, espérons-le, à expliquer la différence]

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

7
mtariq
\b <= this is a Word boundary.

Correspond à une position qui est suivie par un caractère Word mais non précédée par un caractère Word, ou qui est précédée par un caractère Word mais non suivie par un caractère Word.

\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 d'associer?

Quelques sites Web regex utiles pour les débutants ou juste pour mouiller votre appétit.

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

4
james emanon

\w est pas une limite de Word, il correspond à tout caractère Word, y compris les traits de soulignement: [a-zA-Z0-9_]. \bis une limite de mot, c'est-à-dire qu'elle correspond à la position entre un mot et un caractère non alphanumérique: \W ou [^\w].

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

2
Julián Urbano