Expression régulière: +$ VS *$ VS aucune
Dans les expressions régulières, quelle est la différence entre ^[a-zA-Z]+$
et ^[a-zA-Z]*$
. Aussi serais-je capable de ne pas l'inclure à tous, que ce soit avec ^[a-zA-Z]$
ou ^[a-zA-Z]
.
J'ai regardé en ligne et il est dit que +
correspond au caractère précédent, une ou plusieurs fois et *
correspond au caractère précédent zéro ou une fois, mais je n'ai aucune idée de ce que cela signifie dans ce contexte, ou à tous les.
^[a-zA-Z]*S
peut-être faute de frappe à la fin?Peut-être que vous devriez jeter un oeil ici http://www.regular-expressions.info/. C'est un bon point de départ avec la regex.
Il n'y a pas de façon significative de comparer
+$
et *$
. Le point de +
et *
est qu'ils correspondent à la précédent jeton d'au moins zéro (*
) ou au moins une fois (+
). E. g. [a-zA-Z]+
signifie: n'importe quel caractère de a
à z
ou de A
à Z
au moins une fois (en une ligne). Cela pourrait correspondre à des choses comme abc
, abCD
mais pas la chaîne vide ou 6
, etc.^
signifie qu'il doit correspondre au début. $
signifie qu'il doit correspondre à la fin. Je suis en supposant qu'il existe une faute de frappe dans votre deuxième déclaration? Si oui, le premier principe affirme qu'il doit être une lettre ou d'un mot (contenant des lettres majuscules ou minuscules) pour être valide, et le second dit qu'il peut être vide ou d'une lettre ou d'un mot (contenant des lettres majuscules ou minuscules).OriginalL'auteur Alan Schapira | 2015-12-15
Vous devez vous connecter pour publier un commentaire.
+
signifie 1 ou plus*
signifie 0 ou plusAlors une chaîne vide est trouvé par
^[a-zA-Z]*$
, mais pas par^[a-zA-Z]+$
^[a-zA-Z]$
signifie EXACTEMENT une lettre allant de a-z et A-Z.a+
esta
,aa
,aaa
, ...,aaa...aaa
, etca*
est ",a
,aa
,aaa
, ...,aaa...aaa
, etc^$ "n'est qu'un"
EDIT: vous pouvez également utiliser
^a?$
pour trouver 0 ou 1 occurrence dea
, donc soit " oua
^[a-zA-Z]*$
et[Required]
plutôt que^[a-zA-Z]+$
afin que je puisse avoir un message d'erreur pour l'?Je ne suis pas sûr de savoir si [obligatoire] donne une erreur lorsque vous passez une chaîne vide, donc je ferais quelque chose comme si la chaîne.IsNullOrEmpty{throw new exception} ou quelque chose comme ça. Ne pas utiliser des regex pour vérifier les cordes à vide, mais l'utilisation intégrée dans les types et les méthodes de
OriginalL'auteur SubliemeSiem
^
et$
sont ancres. Ils ne correspondent pas n'importe quoi, tout ce qu'ils font est de placer le à un endroit particulier dans l'entrée.^
, vous dire le moteur de tout ce qui suit, il doit commencer au début de la ligne$
, vous dire le moteur de tout ce qui précède, il doit commencer à la fin de la ligne^
et$
vous dire le moteur de tout ce qui est entre eux doit couvrir l'ensemble de la ligne de bout en bout.Maintenant, il devrait être facile de comprendre la différence entre
[a-zA-Z]*
et[a-zA-Z]+
placé entre les ancres: l'un avec l'astérisque permet de lignes vides, tandis que celui avec le plus, insiste sur la correspondance au moins un caractère.Il devrait également être facile à comprendre ce qui se passe lorsque vous le placez sur un seul point: essentiellement, vous laissez le moteur ignorer le début (quand
^
est manquant) ou à la fin de la ligne (lors de la$
est manquant) lorsque l'on recherche un match.OriginalL'auteur dasblinkenlight
^[a-zA-Z]+$
correspond à une chaîne alphabétique (constitué par les lettres a-z, grande ou petite), de la taille 1 ou plus. Le ^ et le $ caractères signifie "début" et "fin" de la ligne, donc ils ne correspondent à des gammes complètes, consistant en un "mot".^[a-zA-Z]*S
est similaire, seulement l'astérisque (*) signifie "pas d'ou un certain nombre de" le caractère précédent/groupe. Le S est juste un S et correspond exactement à un S. Fondamentalement, l'ensemble de la chose correspond à toute chaîne qui commence au début d'une ligne, contient un nombre quelconque de lettres, et se termine avec une S. d'Autres choses peuvent venir après le S cependant, la ligne ne se termine pas là, puisque $ n'a pas été utilisé.OriginalL'auteur sara
[a-zA-Z]+ correspond à un seul caractère présent dans la liste ci-dessous
Quantificateur: + Entre un et un nombre illimité de fois, autant de fois que possible, en donnant à l'arrière comme nécessaire [gourmand]
a-z un caractère unique dans la plage comprise entre a et z (sensible à la casse)
A-Z un caractère unique dans la plage comprise entre A et Z (sensible à la casse)
$ affirmer la position à la fin de la chaîne
De manière à ce match, fondamentalement, n'importe quelle chaîne de lettres
Foo
,Bar
,sdasndjkasnd
Mais ne trouvera pas autre chose comme
asds2
,ab c
,@23
ne correspondent pas[a-zA-Z]* correspond à un seul caractère présent dans la liste ci-dessous
Quantificateur: * Entre zéro et un nombre illimité de fois, autant de fois que possible, en donnant à l'arrière comme nécessaire [gourmand]
a-z un caractère unique dans la plage comprise entre a et z (sensible à la casse)
A-Z un caractère unique dans la plage comprise entre A et Z (sensible à la casse)
S correspond au caractère S littéralement (sensible à la casse)
Ce match sera le même, mais vous DOIT ont un S majuscule à la fin d'un match.
Comme
BallS
,FooS
,BarS
correspondra --ASzs
correspondra [COMME]Balls
,Foos
Ne correspondra pas siOriginalL'auteur Timmy