2010-12-08 9 views
0

Je ne sais pas comment écrire une telle regex. Je vais commencer par l'exemple.Problème de correspondance Regex

Mon mauvais regex:

(\d*),?(\d*\.?\d*)-?(\d*\.?\d*),?([0-1]?),?([0-1]?),?([^\/]*) 

Correspondances qui sont OK:

1,2-3,1,1,asdf 
1,2-3,1,1 
1,2-3,1 
1,2-3 
1,2 
1 

Mais malheureusement, ce sera également adapté et je ne veux pas que ce soit:

asdf 
1,asdf 

Idéalement, je voudrais quelque chose comme - match, si les groupes précédents ont été assortis. Je sais que le regard probablement positif derrière devrait être utilisé, mais si je ne me trompe pas, il devrait être utilisé juste en face de chaque groupe, sauf le 1er et regex serait grand et malodorant après cela. Euh, et ce serait probablement de longueur variable.

Y a-t-il une façon élégante de faire cela?

EDIT

Je veux trouver toutes les lignes ci-dessous correspondances qui sont OK. Je veux faire correspondre \d* au premier groupe. Ensuite, s'il y avait un match à \d* suivi par ,, je voudrais faire correspondre (\d*\.?\d*) au deuxième groupe. Après cela, s'il y avait un match dans le premier groupe suivi par , et correspondre dans le deuxième groupe suivi par - je voudrais faire correspondre un autre (\d*\.?\d*) ... etc à la fin de Regex.

+5

Pouvez-vous expliquer ** ce que ** vous voulez faire correspondre, pas ce que vous n'avez pas? – detunized

+0

oui, qu'essayez-vous d'accomplir? Cela aiderait .. –

+0

Vous ne l'expliquez toujours pas ... Focus et postez une question claire. –

Répondre

1

Vous n'êtes pas très clair dans votre question, mais des exemples que je crois que c'est ce que vous avez besoin:

^\d(,\d-\d(,\d(,\d(,[a-z]+)?)?)?)?$ 

alt text

Il correspond:

1,2-3,1,1,asdf 
1,2-3,1,1 
1,2-3,1 
1,2-3 
1,2 
1 

Test link.

+0

Merci pour votre code. C'est presque exactement ce dont j'avais besoin, mais le plus important est que ça m'a aidé :) Mon regex ressemble maintenant à ceci: '^ ((\ d *) (, (\ d * \.? \ D *) -? (\ d * \.? \ d *) (, ([0-1]?) (, ([0-1]?) (, ([^ \ /] +))?)?)?)?)? 'Désolé de ne pas être effacer. – prostynick

+1

Envisagez d'utiliser '(?: Your_regex)' si vous voulez que certains groupes ne soient pas capturés. http://www.regular-expressions.info/refadv.html –

+0

Non, j'ai besoin de tous. Je savais que ce serait trivial, mais je ne savais pas comment le démarrer:/ – prostynick

Questions connexes