2013-05-09 71 views
0

我希望能夠使用Ruby 1.8.7來匹配以下所有情況。ruby​​正則表達式:匹配URL重複模式

/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 

我目前有:

\/pages\/multiedit\/\d* 

這高達第一組數字相匹配。舉例來說:

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

例如參見http://rubular.com/r/ruFPx5yIAF

感謝您的幫助,正則表達式的神。

回答

1

我會使用:

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

下面是模式的示範在http://rubular.com/r/h7VLZS1W1q

[\d,]+表示「找到一個或多個數字或逗號」

原因\d*不起作用是否意味着「查找零個或更多個數字」。只要模式搜索遇到逗號,它就會停止。你必須告訴引擎,可以找到逗號。

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

例子:http://rubular.com/r/0nhpgki6Gy

編輯:更新後無法捕捉什麼...雖然性能影響可以忽略不計。 (感謝田民)

目前公認的答案

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

可能不是一個好主意,因爲這也將匹配下列字符串

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

我的回答需要有至少一個在第一個逗號之前的數字,並且逗號之間至少有一個數字,並且它必須以數字結尾。

+0

在模式中小心使用'(...)',因爲它們在捕捉。相反,你應該使用'(?:...)'這是不捕獲。 – 2013-05-09 03:59:36