2010-12-15 7 views
1

J'éprouve des difficultés à venir avec une expression régulière pour une chaîne sous la forme donnée:regexp pour trouver clés paires de valeurs séparées par deux points

123123<key:value><key:value>,21313<key:value><key:value> 

où la clé: des paires de valeurs sont facultatives, mais nous devons ne pas avoir deux deux-points dans la même clé: paires de valeurs.

Je suis arrivé jusqu'ici:

^((\d+)(<(.+?):(.+?)>)*)(,\d+)(<(.+?):(.+?)>)*$ 

quelques textes valides:

  • 123131
  • 123131, 123131, 1213313
  • 12313<key:value>
  • 232133<key:value><key:value>,232133<key:value><key:value>
+1

Un analyseur linéaire de chaîne serait beaucoup mieux et plus facile à écrire et maintenir. – OrangeDog

Répondre

2

Essayez ceci:

^((\d+)(<(.+?):(.+?)>){0,2})(,\s*((\d+)(<(.+?):(.+?)>){0,2}))*$ 

Selon le groupe que vous ne voulez pas capturer, vous pouvez changer ()-(?: ).

Rubular link

1

Essayez d'utiliser cette ^(\d+(<.+:.+>){1,2})(,\d+(<.+:.+>){1,2})*$ Espérez il a aidé

0

Merci beaucoup pour vos réponses, mais aucun d'entre eux semblent faire excactly ce que je cherche. Je pense que peut-être la chose de easies est de suivre la suggestion d'OrangeDogs considérant la maintenabilité aussi bien ...

Questions connexes