正则表达式仅与https匹配特定网址

时间:2015-08-13 22:24:59

标签: regex url-rewriting

我无法绕过正则表达式,所以我会请求你的帮助

我正在寻找一个可以匹配以下测试用例的正则表达式(与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)+)*

但它没有通过我的单元测试,你能指出我正确的方向吗? (不仅仅是寻找正确的正则表达式,而是因为我的正则表达式无法正常工作)

2 个答案:

答案 0 :(得分:0)

我这样做:

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

说明:

^ - >字符串的开头(网址)

(?:http://| - >我们正在寻找http://或什么都没有,而?:是为了建立一个不匹配的群体(可能会被忽略)

projects \ .myurl \ .com \ .lol - >您正在寻找的网址的主要部分

。* - >任何字符0次或以上

$ - >字符串结尾(网址)

不幸的是,我无法解释为什么你的正则表达式无法正常工作,因为我无法弄清楚你想要达到的目标;)也许你可以尝试解释"你的正则表达式和我一样吗?

答案 1 :(得分:0)

如果您的语言支持负面观察,请尝试:

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

DEMO

其中(?<!https:\/\/)https://的负面后瞻,因此所有匹配但前面都有https://的片段都不会匹配。

如果您还希望匹配((\/[^\/\n]+)+)?部分,则最后一部分/.../...是可选的。如果您的语言不支持正面观察,您可以使用:

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

DEMO

其中(\s|^)代表whitspace(如果url由某些文本继续)或行的开头(如果url在单独的字符串中或在字符串的开头)。 您也可以在此处添加可选部分以捕获/.../...部分。

您的正则表达式失败,因为,因为您可以check here,也可以匹配:

  • 无处不在,因为你对其余的正则表达式*使用(...)*量词,这意味着零次或多次,所以一切都是可选的,它也匹配字母之间的点等,没有{ {1}}:
  • 它仍匹配*,因为https://projects.myurl.com.lol之后的部分有效,因此它只匹配此部分。这里的情况是确保正则表达式仅在http://出现时才匹配,或者url不会以任何单词开头,