Bonjour bonjour...
Je cherche une regex un peu pointue (pour mon niveau) et je rencontre quelques difficultés :
L'objectif initial est de valider une "phrase" constituée d'une tache et de tags.
- Les tag sont placés en fin de phrases, séparés d'un espace et commencent par des dièses
- La tache peut contenir des espaces (mais pas commencer par un espace, et
initialement ne devait pas contenir de dièses)
"my first task" -> OK
"my first task #tag1" -> OK
"my first task #tag1 #tag2" -> OK
"myfirsttask #tag1 #tag2" -> OK
"#tag1 #tag2" -> KO (la tache commence par un diese)
"myfirsttask #tag 1 #tag2" -> KO (un élement de la partie tags ne commence pas par un dièse)
" myfirsttask #tag1 #tag2" -> KO (la tache commence par un espace)
"myfirst#task #tag1 #tag2" -> KO (la tache contient un diese)
"url myfirst#task #tag1 #tag2" -> KO (la tache contient un diese)
Du coup, j'étais arrivé à cette regex :
^([^# ])([^#])*( #[^ #]+)*$
qui fonctionnait bien.
Mais je veux maintenant tolérer le dièse dans la partie "tache" si et ssi il n'est pas précédé ou suivi d'un espace (afin de pouvoir stocker une url par exemple).
C'est à dire que le dernier exemple ci-dessus devienne OK :
"myfirst#task #tag1 #tag2" -> OK (la tache contient un diese mais celui-ci n'est pas précédé ou suivi d'un espace)
"url myfirst#task #tag1 #tag2" -> OK (idem)
Et là... je suis pommé...
Quelqu'un aurait l'amabilité de m'aider pour cette évolution?
Pour aide et vérification :
https://regex101.com/
^([^# ])([^#])*( #[^ #]+)*$
pour la partie REGULAR EXPRESSION
my first task
my first task #tag1
my first task #tag1 #tag2
myfirsttask #tag1 #tag2
myfirst#task #tag1 #tag2
url myfirst#task #tag1 #tag2
#tag1 #tag2
myfirsttask #tag 1 #tag2
myfirsttask #tag1 #tag2
url myfirst#task # #tag2
pour la partie TEST STRING -le premier bloc doit passer intégralement, pas le second-