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?
3 Réponses :
Vous pouvez le faire en utilisant une condition d'anticipation avec alternance:
^(?!\*$|.*\*\*).*
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@IlCorsaroNero: Cela a-t-il fonctionné pour vous?
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.C'est le regex qui fonctionne.
^(?!\*{2})[^\\\s][^*\\\s]*(?:\*(?!\*)[^*\\\s]*)*$
Utilisez
^(?!\*$|.*\*\*)
Comme anticipation négativeSalut, la réponse a-t-elle fonctionné pour vous? Si oui, veuillez envisager d'accepter.