2015-08-13 28 views
0

我不能環繞正則表達式我的頭,所以我懇請竟被問你的幫助正則表達式匹配特定的URL只能以https

我正在尋找一個正則表達式(與IIS URL重寫兼容模塊)可以匹配下面的測試情況:

Regex should match http://projects.myurl.com.lol 
Regex should match http://projects.myurl.com.lol/ 
Regex should match http://projects.myurl.com.lol/documents/etc 
Regex should match projects.myurl.com.lol 
Regex should match projects.myurl.com.lol/ 

Regex should match projects.myurl.com.lol/whatever 

Regex should not match https://projects.myurl.com.lol 
Regex should not match http://something.myurl.com.lol 
Regex should not match blahblahblah 

到目前爲止,我得到這個

((http:\/\/)?(projects\.myurl\.com\.lol)+)* 

,但它不是通過我的單元測試,你可以點我朝着正確的方向嗎? (不僅是尋找一個正確的正則表達式,但對於原因,我正則表達式不會工作)

回答

0

我wolud做這樣的:

^(?:http://|)projects\.myurl\.com\.lol.*$ 

說明:

^ - >的開始字符串(URL)

- >我們正在尋找HTTP(http://|)://或沒有和:是使非匹配組(也許可以中省略)?

項目\ .myurl \ .COM \ .lol - URL的>主要部分你想找的

* - >任意字符0次或多次

$ - >結尾字符串(url)

不幸的是,我不能說出爲什麼你的正則表達式不起作用,因爲我很難弄清楚你想達到什麼;)也許你可以嘗試像我一樣「解釋」你的正則表達式?

0

如果你的語言支持性否定回顧後,嘗試用:

(?<!https:\/\/)(http:\/\/)?(projects\.myurl\.com\.lol)((\/[^\/\n]+)+)? 

DEMO

其中(?<!https:\/\/)https://所以這將匹配所有片段的負回顧後,但https://前面都不會匹配。

最後一部分((\/[^\/\n]+)+)?是可選的,如果你想匹配/.../...部分。如果語言不支持積極的回顧後,您可以使用:

(\s|^)(http:\/\/|)?(projects\.myurl\.com\.lol) 

DEMO

其中(\s|^)立場whitspace(如果網址是由一些文本進行)或開始行的(如果網址是單獨的字符串或字符串的開頭)。 您也可以在此處添加可選部件以捕獲/.../...部件。

你的正則表達式失敗,因爲,你可以check here,也可以搭配:

  • 隨處可見,如您對正則表達式((...)*),這意味着零次或多次的其餘部分使用* quantifire,所以一切是可選的,它也匹配字母之間的點等,沒有*
  • 它仍然匹配https://projects.myurl.com.lol,因爲//之後的部分是有效的,所以它只匹配這部分。這裏的情況是確保正則表達式只會在http://匹配時匹配,否則url將不會被任何單詞前綴,