2
votes

Je cherche une regex qui ne permet pas plus que le caractère étoile consécutif

Bonjour Je suis à la recherche d 'une regex qui ne permet pas d' écrire plus de caractères en étoile consécutifs et de ne pas autoriser une chaîne avec juste plus de caractères en étoile. par exemple :

a*g*h*  // is allowed
***** // is not allowed
* //is not allowed
*a //. is allowed  

en ce moment j'ai cette regex: ^([^*]*\*{1,2}[^*]*|\*[^*]*\*{1,2}[^*]*|\*\*[^*]+\*{1,2}[^*]*|[^*]*)$

Quelqu'un peut m'aider pls?


2 commentaires

Utilisez ^(?!\*$|.*\*\*) Comme anticipation négative


Salut, la réponse a-t-elle fonctionné pour vous? Si oui, veuillez envisager d'accepter.


3 Réponses :


2
votes

Vous pouvez le faire en utilisant une condition d'anticipation avec alternance:

^(?!\*$|.*\*\*).*

Démo RegEx

Détails RegEx:

  • ^ : Démarrer
  • (?!\*$|.*\*\*) : Assertion de recherche négative qui échoue à la correspondance si nous avons juste * avant la fin ou si ** n'importe où dans l'entrée est devant
  • .* : Correspond à 0 ou plus de n'importe quel caractère


1 commentaires

@IlCorsaroNero: Cela a-t-il fonctionné pour vous?



2
votes

Vous pouvez utiliser

^(?!\*+$)[^*]*(?:\*(?!\*)[^*]*)*$

Voir la démo regex (où [^*] est remplacé par [^*\n] pour rester sur la même ligne puisque la démo est exécutée sur une seule chaîne multiligne plutôt que sur un ensemble de chaînes séparées).

Détails

  • ^ - début de chaîne
  • (?!\*+$) - non * seule chaîne autorisée
  • [^*]* - 0+ caractères autres que *
  • (?:\*(?!\*)[^*]*)* - zéro ou plusieurs répétitions de
    • \*(?!\*) - a * non suivi d'un autre *
    • [^*]* - 0+ caractères autres que *
  • $ - fin de chaîne.


0 commentaires

0
votes

C'est le regex qui fonctionne.

^(?!\*{2})[^\\\s][^*\\\s]*(?:\*(?!\*)[^*\\\s]*)*$


0 commentaires