Quelqu'un peut-il expliquer la différence entre \b
et \w
les métacaractères d'expression régulière? Je crois comprendre que ces deux métacaractères sont utilisés pour les limites de mots. En dehors de cela, quel méta caractère est efficace pour un contenu multilingue?
142
\w
représente un caractère de mot , tandis que\b
représente une limite de mot entre un caractère de mot et un caractère non mot. Ce n'est pas la même chose.Réponses:
Le métacaractère
\b
est une ancre comme le signe curseur et le signe dollar. Il correspond à une position appelée «limite de mot» . Cette correspondance est de longueur nulle.Il existe trois positions différentes qui peuvent être qualifiées de limites de mots:
En termes simples:
\b
permet d'effectuer une recherche "mots entiers uniquement" à l' aide d'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 des «caractères de mot» sont des «caractères de non-mot» .Dans toutes les saveurs, les caractères
[a-zA-Z0-9_]
sont des caractères de mots. Ils correspondent également à la classe de caractères abrégés\w
. Les saveurs affichant "ascii" pour les limites de mots dans la comparaison de saveurs ne reconnaissent que ces derniers comme caractères de mot.\w
signifie «caractère de mot» , généralement[A-Za-z0-9_]
. Notez l'inclusion du trait de soulignement et des chiffres.\B
est la version annulée de\b
.\B
correspond à chaque position où\b
pas. Effectivement,\B
correspond à n'importe quelle position entre deux caractères de mot ainsi qu'à n'importe quelle position entre deux caractères non mot.\W
est l'abréviation de[^\w]
, la version annulée de\w
.la source
\w
correspond à un caractère de mot.\b
est une correspondance de largeur nulle qui correspond à un caractère de position qui a un caractère de mot d'un côté, et quelque chose qui n'est pas un caractère de mot de l'autre. (Des exemples de choses qui ne sont pas des caractères de mots incluent les espaces, le début et la fin de la chaîne, etc.)\w
allumettesa
,b
,c
,d
,e
, etf
dans"abc def"
\b
correspond à la position ( de longueur nulle) avanta
, aprèsc
, avantd
, et aprèsf
en"abc def"
Voir: http://www.regular-expressions.info/reference.html/
la source
\b
une assertion de largeur nulle; il ne correspond pas à un caractère , il correspond à une position .@Mahender, vous vouliez probablement dire la différence entre
\W
(au lieu de\w
) et\b
. Sinon, je serais d'accord avec @BoltClock et @jwismar ci-dessus. Sinon, continuez à lire.\W
correspondrait à n'importe quel caractère non-mot et il est donc facile d'essayer de l'utiliser pour faire correspondre les limites des mots. Le problème est qu'il ne correspondra pas au début ou à la fin d'une ligne.\b
est plus adapté pour faire correspondre les limites des mots car il correspondra également au début ou à la fin d'une ligne. En gros (les utilisateurs plus expérimentés peuvent me corriger ici)\b
peut être considéré comme(\W|^|$)
. [Modifier: comme @ Ωmega le mentionne ci-dessous, il\b
s'agit d'une correspondance de longueur nulle, donc ce(\W|^|$)
n'est pas strictement correct, mais nous espérons aider à expliquer la différence]Exemple rapide: pour la chaîne
Hello World
,.+\W
correspondraitHello_
(avec l'espace) mais ne correspondrait pasWorld
..+\b
correspondrait à la foisHello
etWorld
.la source
\b
sens de la même chose que(\W|^|$)
, car(\W|^|$)
inclura le caractère non-mot dans le résultat correspondant. Vous pouvez vérifier ce fait ici => regexr.com/3qf98 .\b
pour moi, cela signifie la même chose que(?<=\W|^|$)
lorsqu'il est utilisé avant un motif et(?=\W|^|$)
lorsqu'il est utilisé après un motif. Vous pouvez vérifier de quoi je parle ici => regexr.com/3qf9h . Comparez simplement avec le résultat des\b
ancres ici => regexr.com/3qf9tCorrespond à une position qui est suivie d'un caractère de mot mais non précédée d'un caractère de mot, ou qui est précédée d'un caractère de mot mais non suivie d'un caractère de mot.
Il correspond toujours aux caractères ASCII [A-Za-z0-9_]
Essayez-vous de faire correspondre quelque chose de spécifique?
Quelques sites Web de regex utiles pour les débutants ou simplement pour vous mettre en appétit.
J'ai trouvé que c'était un livre très utile:
la source
\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 8 bits si les paramètres régionaux sont définis correctement .\w
est pas une limite de mot, il correspond à un caractère de mot, y compris underscores:[a-zA-Z0-9_]
.\b
est 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 cependant varier d'une langue à l'autre.
la source