RegEx et les codes correspondant à droite à gauche
Question
stuggling un peu avec le RegEx, j'ai 4 codes dans une chaîne
CODE4: CODE3: CODE2: CODE1
chaque code est optionnelle en dehors de CODE1
Je pourrais avoir ab: bc: de: fg
ou
bc :: fg
ab ::: fg
Dans chaque cas du CODE1 ci-dessus = fg DND pour la vie chère de moi, je ne peux pas travailler le regex
Ce serait facile à faire comme analyse syntaxique de chaîne standard, mais unforunatly à cause des objets buisness des besoins à faire via :-( regex et retour par un vb.net RegEX.matche, des groupes ( « Code1 ») fg (I espère que le bon sens)
Merci d'avance pour toute aide
Nous avons fini avec un peu de RegEx qui fait le travail, peu en désordre, mais cela fonctionne
(^(?<code1>[\w]*)$)|(^(?<code2>[\w]*):(?<code1>[\w]*)$)|(^(?<code3>[\w]*):(?<code2>[\w]*):(?<code1>[\w]*)$)|(^(?<code4>[\w]*):(?<code3>[\w]*):(?<code2>[\w]*):(?<code1>[\w]*)$)
Ta tous
La solution
Il n'y a pas besoin d'utiliser une expression régulière ici.
Je ne sais pas quelle langue que vous utilisez, mais diviser la chaîne sur « : » et vous aurez un tableau de codes
.Si vous voulez vraiment juste pour valider si une chaîne est valable pour cela, alors
/(\w*:){0,3}\w+/
correspond à votre description et les quelques exemples que vous avez donné.
Autres conseils
Je ne sais pas pourquoi vous devez faire correspondre les codes de droite à gauche. Il suffit d'utiliser une expression régulière pour décortiquer la chaîne:
/(.*):(.*):(.*):(.+)/
et puis vous avez CODE1 à 4 $, 3 $ en CODE2, Code3 à 2 $, CODE4 en 1 $.
(CODE1)?:(CODE2)?:(CODE3)?:CODE4
fonctionnerait - si le chef de file: ne pas d'importance. Dans le cas contraire, si vous ne pouvez pas avoir plus grands côlons, énumérer:
(CODE1:(CODE2)?:(CODE3)?:|CODE2:(CODE3)?:|CODE3)?CODE4
Il n'y a rien de spécial le fait que la partie la plus à droite est obligatoire, et les plus à gauche ne sont pas parties.