2012-01-16 18 views
1

我有一個Web服務,我有一個重寫。我需要能夠在查詢中使用連字符或短劃線。 這裏是我的改寫:REGEX重寫問題以允許連字符

rewrite ^/app/api/sanction/([0-9]+)/athleteList/([a-zA-Z0-9,]+)/-([0-9,]+)$ /app/athleteList.phtml?s=$1&l=$2&c=$3 last; 

的查詢工作正常是這樣的:

/app/api/sanction/35172/athleteList/MLEVEL07/25001,24450 

然而,當我把一個破折號或連字符這裏,查詢將失敗。

/app/api/sanction/35172/athleteList/MLEVEL-07/25001,24450 

正如你所看到的,我在正則表達式中所列的連字符,不知道什麼,我可能是錯在這裏幹什麼?

回答

3

你應該把連字符前面的組:

([a-zA-Z0-9,-]+)/([0-9,]+) 

這將然而,比賽「--- 1020 - , - 02-1-,」我不知道這是什麼你要。因此,我的第一個命題,現予以更正:

([a-zA-Z0-9,]+)(-([0-9]+))?/-([0-9,]+) 

這將只匹配 「weofhw234fhweo,sdfsff3284982-20423400」,而不是 「 - ,j2j,f9223-2-3402--0d-f0s-F」

0

只需添加一個-([a-zA-Z0-9,-]+),在[]結束字符類,並刪除連字符下一/後:

rewrite ^/app/api/sanction/([0-9]+)/athleteList/([a-zA-Z0-9,-]+)/([0-9,]+)$ /app/athleteList.phtml?s=$1&l=$2&c=$3 last; 
#----------------------------------------------------------^^^^^^^^ 
+0

啊哈,謝謝邁克爾(掌心拍拍我的額頭!) - 馬特 – 2012-01-16 15:27:09

1

我想你已經弄丟了衝刺。它應該是這樣的

rewrite ^/app/api/sanction/([0-9]+)/athleteList/([a-zA-Z0-9,-]+)/([0-9,]+)$ /app/athleteList.phtml?s=$1&l=$2&c=$3 last; 

請注意,「 - 」已從「/」後移入括號內。如果短劃線是方括號內的最後一個字符,則它不具有標記字符範圍的特殊含義(如在a-z中)。