Avec l'expression de correspondance regex
\ b. * # \ b
pourquoi ces deux exemples correspondent-ils comme ci-dessous (en surbrillance):
a #b # c #
a #b #c # d
Plus précisément, pourquoi la première chaîne ne correspond-elle pas à tout contenir jusqu'au dernier #?
Puisqu'une limite de mot (\ b) est une correspondance de largeur nulle qui peut correspondre entre un caractère de mot (\ w) et un caractère non-mot (\ W) ou entre un caractère de mot et le début ou la fin de la chaîne , Je ne sais pas comment la fin d'une expression par un caractère autre qu'un mot affecterait la correspondance.
3 Réponses :
Voici votre regex actuelle:
[^# ]+#
Et voici le premier exemple d'entrée:
a #b #c # ^^^^^^ <-- last word boundary is here
La première limite de mot se produit en fait avant le a initial. Ensuite, . * consommera avidement tout jusqu'au dernier # qui est suivi d'une limite de mot. Comme vous l'avez cité, une limite de mot se produit entre un mot et un caractère non mot, ou vice-versa. La dernière fois que cela se produit, c'est #c , car le # final (en gardant à l'esprit que # n'est pas un caractère de mot) n'est pas suivi d'un caractère de mot.
Si vous voulez juste saisir tous les mots qui se terminent par # , utilisez simplement ceci:
\b.*#\b
Merci pour l'explication! Je ne connaissais pas la partie "vice-versa" de l'utilisation de \ b, lorsqu'un caractère non-mot est suivi d'un caractère mot.
Belle explication.
Sur la première chaîne a #b #c #
il n'y a pas de limite de mot a #b #c # <-ici et -> EOS
donc \ b. * # \ b correspond à a #b # c # parce que
il y a une limite de mot entre a #b # <- ici et ici -> c #
Sur le second a #b #c #d c'est plus un problème de correspondance
premier et une limite de mot en second.
Il doit correspondre à une limite de mot après un #,
donc il le trouve entre a #b #c # <- ici et ici -> d
Les limites des mots sont difficiles au début,
mais si vous utilisez une phrase, vous ne serez plus jamais confus.
Bonne chance à toi !
Votre commentaire a été très utile pour ma compréhension. Les expressions régulières sont puissantes, mais difficiles à faire.
\ b Ne peut faire correspondre que les lettres, les chiffres, les soulignements et les caractères chinois. Il est dommage que # ne soit pas dedans.
\ b ne correspond à aucun caractère! C'est une assertion de longueur nulle qui correspond à une limite de mot.
À quoi essayez-vous réellement de correspondre?
Mon intention initiale était de faire correspondre les mots se terminant par # dans un texte. Par exemple, abc # et cde # dans abc # hij cde # fgh.