7
votes

Écrivez une expression régulière pour rejeter les cordes contenant une période

J'aimerais trouver une expression régulière qui ne permet pas des chaînes contenant le "". caractère.

Par exemple, this_is! A-CAT doit être accepté, mais this.isacat doit être rejeté.


2 commentaires

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


4 Réponses :


14
votes

Vous pouvez utiliser cette regex: ^ [^.] * $

  1. ^ - début de chaîne
  2. [^.] * - n'importe quel caractère sauf . , un nombre de répétitions
  3. $ - fin de chaîne

2 commentaires

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.



-1
votes
/^[^.]+$/

3 commentaires

Votre premier exemple n'atteint que le point si c'est le premier caractère de la chaîne. Vous voulez dire / ^ (?!. * \.). + $ / .


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



1
votes

Faites correspond simplement sur le personnage, puis nier le résultat:

my $str = 'this.isacat';
my $has_no_comma = !($str =~ !m/\./);


2 commentaires

Perl a ! ~ , par exemple: $ str! ~ /\./.


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



0
votes
^[^\.]*$
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.

0 commentaires