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.