J'aimerais trouver une expression régulière qui ne permet pas des chaînes contenant le "". caractère. p>
Par exemple, this_is! A-CAT CODE> doit être accepté, mais this.isacat code> doit être rejeté. P>
4 Réponses :
Vous pouvez utiliser cette regex: ^ [^.] * $ code> p>
^ code> - début de chaîne li>
[^.] * code> - n'importe quel caractère sauf . code>, un nombre de répétitions li>
$ code> - fin de chaîne li>
ol>
Allait poster exactement la même chose
J'ai l'impression que ma solution serait plus rapide et je pense aussi que cela vaut la peine d'encourager les gens à réfléchir à la possibilité de "Et si je devais juste avoir besoin de nier le modèle?" dans le cas général. Tant de gens essaient juste de forcer le regèex à faire correspondre le problème, où une simple transformation du problème pourrait simplifier radicalement la solution.
/^[^.]+$/
Votre premier exemple n'atteint que le point si c'est le premier caractère de la chaîne. Vous voulez dire / ^ (?!. * \.). + $ / Code>.
@Tim: bon appel. J'essayais d'offrir une alternative à l'utilisation d'une classe, mais vous êtes effectivement correct. Merci pour la prise.
-1 @ "Utilisez un aspect négatif" pour une telle chose, et celui-ci ne travaillant même pas si une pause de ligne est présente.
Faites correspond simplement sur le personnage, puis nier le résultat:
my $str = 'this.isacat'; my $has_no_comma = !($str =~ !m/\./);
Perl a ! ~ Code>, par exemple: $ str! ~ /\./ code>.
@Qtax: Je suis au courant, mais je voulais montrer l'intention plutôt que d'utiliser un opérateur qui pourrait ne pas exister dans d'autres langues. Merci pour votre commentaire.
^[^\.]*$ This defines a character class which matches all character except the dot. It also specified that the complete string from start to end much consist of character from this class.
Avez-vous besoin d'une expression régulière? De nombreuses langues fournissent des fonctionnalités de "chaîne contient".
Ce n'est pas une virgule, c'est une période ...