1
votes

Limites de mots avec des caractères autres que des mots

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.


2 commentaires

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


3 Réponses :


1
votes

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

Démo


2 commentaires

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.



1
votes

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.


2 commentaires

Bonne chance à toi !


Votre commentaire a été très utile pour ma compréhension. Les expressions régulières sont puissantes, mais difficiles à faire.



-2
votes

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


1 commentaires

\ b ne correspond à aucun caractère! C'est une assertion de longueur nulle qui correspond à une limite de mot.