2016-12-15 4 views
4

Je voudrais savoir si cette expression regex est correcte pour vérifier qu'une chaîne ne commence pas par un point, ne se termine pas par un point et contient au moins un point n'importe où mais pas le début ou la fin:La chaîne Regex ne contient pas 2 points d'affilée

Mon problème est que je ne peux pas comprendre comment vérifier s'il y a 2 points d'affilée.

/^([^.])+([.])+.*([^.])$/

+0

Utilisez ce site Web pour tester votre regex https://regex101.com/ – RaR

+0

qui langage de programmation utilisez-vous? il pourrait y avoir une solution plus facile .. – Kent

+0

* "Je voudrais savoir si cette expression regex est correcte" * - il n'y a qu'une seule façon de savoir si elle est correcte ou non (étant donné que vous n'avez pas mentionné le programme ou la langue avec laquelle vous voulez l'utiliser): passez-la au programme cible et voyez si elle fait ce que vous voulez. – axiac

Répondre

4

Il semble que vous devez utiliser

^[^.]+(?:\.[^.]+)+$ 

Voir la regex demo

Détails:

  • ^ - début de la chaîne
  • [^.]+ - 1+ caractères autres qu'un . (donc, le premier caractère ne peut pas être .)
  • (?:\.[^.]+)+-1 ou plus (ainsi, le point à l'intérieur d'une chaîne est obligatoire apparaître à moins une fois) de séquences:
    • \. - un point
    • [^.]+ - 1+ caractères autres que . (+ le quantificateur fait un produit de carbonisation autre que . apparaissent au moins une fois vers l'arrière donc un point, ce qui rend impossible de faire correspondre la chaîne avec 2 points à la fin)
  • $ - fin de la chaîne.
+0

serait '^ [^.] + (?: \. {0, x} [^.] +) + $' Qui ne corrige pas le 'doit avoir'. problème? où x est le nombre maximal de points consécutifs? – user3012759

+0

@ user3012759: le quantificateur limitant est redondant ici car nous devons faire correspondre '.' * * * entre 2 symboles non-' .'. –

+0

Ah, oui vous avez raison OP au sujet d'au moins un, alors oui votre solution est parfaitement bien. – user3012759

2

Vous êtes proche, laissez-vous tenter avec:

^[^.]+(?:\.[^.]+){2,}$ 

Il MACHES cordes qui ont 2 ou plusieurs points, mais pas au début ou à la fin.

Si vous voulez un ou plusieurs points:

^[^.]+(?:\.[^.]+)+$ 

Si vous voulez un ou deux points:

^[^.]+(?:\.[^.]+){1,2}$