2015-12-22 7 views
1

Я хочу использовать Regex чек вместоRegex для сопоставления конкретного выражения

if(actionContext.Request.RequestUri.AbsolutePath == "/api/v1/token") 

используя что-то вроде:

Regex rgx = new Regex(@"/api/v1/token"); 

и сопоставления не только v1, но и v2, v3, v4 и т.д. на ...

if(rgx. actionContext.Request.RequestUri.AbsolutePath.isMatch){ 
//then do further actions 

} 

ответ

0

Я считаю, что это решение вашей проблемы.

Regex rgx = new Regex(@"/api/v[0-9][0-9]*/token") 

Пожалуйста, обратите внимание, как вы не указали, если вам нужно просто v1, v2, v3 и v4 или любой пронумерованный суффикс, я предположил, что последний.

Edit 01: Как добрый друг указал, это может быть достигнуто с помощью этого так что я предполагаю, что лучший способ сделать это

Regex rgx = new Regex(@"/api/v[0-9]+?/token") 

Edit 02: Это позволит устранить v0 в соответствии с требованиями первоначально человека, задавшего вопрос

Regex rgx = new Regex(@"/api/v[1-9][0-9]*/token") 
+0

да, но я могу использовать его как V [0-99] также правильно? – Tanmay

+1

@ Танмай Нет, вы не можете. [0-9] не диапазон, это означает номер –

+0

ok спасибо, а что, если 9999 wil caome каждый раз, когда я должен это изменить? – Tanmay

3

Это должно работать. Он будет соответствовать каждому номеру версии и, по крайней мере, одному номеру.

Regex rgx = new Regex(@"^/api/v[0-9]+?/token$"); 

    /api/v1/token => ok 
    /api/v2560/token => ok 
    /api/v/token => ko 

Вы можете проверить для более Complexe регулярных выражений и проверить его here

UPDATE

Для устранения v0, как оп попросил в комментариях, см отмеченную ответ edit02.

+1

AFAIK вы не должны бежать '/' для C# – AntiHeadshot

3
Regex rgx = new Regex("^\/api\/v[1234]\/token$"); 
if(rgx.IsMatch(actionContext.Request.RequestUri.AbsolutePath)){ 
//then do further actions 

} 
+0

Я думаю, вы должны обернуть регулярное выражение в в '^ $' –

+0

«^ $ \/апи \/V [ 1234] \/token "таким образом – Tanmay

Смежные вопросы