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

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top