2013-05-09 2 views
0

아래의 모든 경우를 Ruby 1.8.7을 사용하여 일치시킬 수 있기를 원합니다.ruby ​​regex : 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* "하나 개 이상의 숫자 또는 쉼표를 찾아"의미 그것은 "0 개 이상의 숫자 찾기"를 의미합니다. 패턴 검색이 쉼표로 실행되는 즉시 중지됩니다. 엔진에 숫자 쉼표를 찾을 수 있다고 알려줘야합니다.

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

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

편집 : 성능 저하는 무시할 수 것이지만 ... 아무것도 캡처하지로 업데이트되었습니다. (감사 틴 남자)

의 현재 허용 대답

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

그 또한 다음과 같은 문자열

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

내 대답과 일치하기 때문에 좋은 생각을하지 않을 수 있습니다 것은 필요가 적어도 하나의 첫 번째 쉼표 앞에있는 숫자와 쉼표 사이에 적어도 하나의 숫자가 있어야하며 숫자로 끝나야합니다.

+0

패턴에서 캡처 중이므로'(...) '을 사용할 때는주의하십시오. 그 대신에'(? : ...)'을 사용해야한다. –