2017-07-03 42 views
1

我需要爲不同的URL發送不同的響應。但我正在使用的正則表達式不起作用。類似URL的正則表達式模式匹配

兩個正則表達式的問題是

"/v1/users/[^/]+/permissions/domain/HTTP/"  

(如:http://localhost:4544/v1/users/10feec20-afd9-46a0-a3fc-9b2f18c1d363/permissions/domain/HTTP

"/v1/users/[^/]+/"  

(如:http://localhost:4544/v1/users/10feec20-afd9-46a0-a3fc-9b2f18c1d363

我無法弄清楚如何在「[^ /] + /」之後停止正則表達式匹配。這兩種模式都返回相同的結果。這就好像歸因於正則表達式,它們都是相同的URL。模式匹配發生在使用匹配謂詞的mountebank嘲笑服務器中。任何幫助,將不勝感激。謝謝。

+2

使用末尾錨點'$'。像:'「/ v1/users/[^ /] +/$」'。 – randomir

回答

2

正則表達式"/v1/users/[^/]+/"與兩個URL都匹配。你要求它匹配'/ v1/users /`加上除'/'之外的任何字符,後面加斜線。這發生在較長的網址和較短的網址中,這就是匹配的原因。

一對夫婦的選擇:

可以搭配較長的網址,而不是一個短的有:

"/v1/users/[^/]+/.+" 

這符合http://localhost:4544/v1/users/10feec20-afd9-46a0-a3fc-9b2f18c1d363/permissions/domain/HTTP,但不http://localhost:4544/v1/users/10feec20-afd9-46a0-a3fc-9b2f18c1d363/

你也匹配只是短一個通過錨定結束:

"/v1/users/[^/]+/$" 

這與匹配短網址,但不是長網址。