2012-01-26 67 views
0

我們使用專有的跟蹤系統,需要使用正則表達式來在我們指定的URL上加載第三方腳本。帶URL的正則表達式 - 語法

我想檢查我們使用的是看它看起來正確的正則表達式的語法。

要符合下列URL

/products/18/indoor-posters 

我們正在利用這個規則:

.*\/products\/18\/indoor-posters.* 

這是否正確?另外,如果URL上有查詢參數,它是否仍然有效?例如

/products/18/indoor-posters?someParam=someValue 

還有另一個URL匹配:

/products 

的規則是這樣的:

.*\/products 

將這項比賽是否正確?

回答

0

那麼,「正確」是一個相對術語。通常,.*不是一個好主意,因爲它匹配任何東西,甚至沒有。因此,雖然這些正則表達式都將匹配您的示例字符串,但它們也會匹配更多。問題是:你使用正則表達式

如果你只是想檢查這些子是否存在字符串中的任何地方,然後他們都很好(但你並不需要的regex無論如何,只是檢查子)。

如果你想以某種方式檢查它是否是一個有效的URL,那麼不,正則表達式不好,因爲它們也匹配foo-bar!$%(§$§$/products/18/indoor-postersssssss)(/$%/§($/

如果你能確保您總能獲得一個正確的網址,作爲輸入,只是要檢查它們是否匹配你的模式,那麼我建議

^.*\/products$ 

匹配任何URL重圓在/products,和

^.*\/products\/18\/indoor-posters(?:\?[\w-]+=[\w-]+)?$ 

以匹配在/products/18/indoor-posters在端部的可選?name=value位結束,假定只有字母數字字符是合法的namevalue的URL。

+0

正則表達式旨在匹配給定URL上的訪問者。因此,例如,訪問者可能會在www.mysite.com/products上打開頁面,並且可能他們在URL中也可能具有查詢參數。我們只想匹配匹配/產品的請求URI,可選地使用例如由?a = b表示的查詢參數。 – thirtyish

+0

@thirtyish:好的,我編輯了我的答案。 –

+0

謝謝你 - 我覺得我們差不多。參數值也需要支持連字符和下劃線。我們將如何做到這一點? – thirtyish