2013-05-09 3 views
0

Je veux être en mesure de faire correspondre tous les cas suivants ci-dessous en utilisant Ruby 1.8.7.ruby ​​regex: URL de correspondance modèle récurrent

/pages/multiedit/16801,16809,16817,16825,16833 
/pages/multiedit/16801,16809,16817 
/pages/multiedit/16801 
/pages/multiedit/1,3,5,7,8,9,10,46 

J'ai actuellement:

\/pages\/multiedit\/\d* 

Cela correspond jusqu'à la première série de chiffres. Par exemple:

"/pages/multiedit/16801,16809,16817,16825,16833"[/\/pages\/multiedit\/\d*/] 
# => "/pages/multiedit/16801" 

Voir par exemple http://rubular.com/r/ruFPx5yIAF.

Merci pour l'aide, dieux regex.

Répondre

1

J'utilise:

/\/pages\/multiedit\/[\d,]+/ 

est ici une démonstration du motif à http://rubular.com/r/h7VLZS1W1q

[\d,]+ signifie « trouver un ou plusieurs numéros ou des virgules »

La raison \d* ne fonctionne pas est-ce que cela signifie "trouver zéro ou plusieurs nombres". Dès que la recherche de motif se termine par une virgule, elle s'arrête. Vous devez dire au moteur que c'est OK pour trouver les numéros et virgules.

2
\/pages\/multiedit\/\d+(?:,\d+)* 

Exemple: http://rubular.com/r/0nhpgki6Gy

Modifier: Mise à jour de ne pas saisir quoi que ce soit ... Bien que le succès de la performance serait négligeable. (Merci Tin Man)

Le moment accepté réponse

\/pages\/multiedit\/[\d,]+ 

ne peut pas être une bonne idée parce que cela va correspondre aussi les chaînes suivantes

.../pages/multiedit/,,, 
.../pages/multiedit/,1, 

Ma réponse exige qu'il y ait au moins un chiffre avant la première virgule, et au moins un chiffre entre virgules, et il doit se terminer par un chiffre.

+0

Soyez prudent en utilisant '(...)' dans les motifs car ils capturent. Au lieu de cela, vous devriez utiliser '(?: ...)' qui ne capture pas. –

Questions connexes