我无法绕过正则表达式,所以我会请求你的帮助
我正在寻找一个可以匹配以下测试用例的正则表达式(与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 :(得分:0)
我这样做:
^(?:http://|)projects\.myurl\.com\.lol.*$
说明:
^ - >字符串的开头(网址)
(?:http://|) - >我们正在寻找http://或什么都没有,而?:是为了建立一个不匹配的群体(可能会被忽略)
projects \ .myurl \ .com \ .lol - >您正在寻找的网址的主要部分
。* - >任何字符0次或以上
$ - >字符串结尾(网址)
不幸的是,我无法解释为什么你的正则表达式无法正常工作,因为我无法弄清楚你想要达到的目标;)也许你可以尝试解释"你的正则表达式和我一样吗?
答案 1 :(得分:0)
如果您的语言支持负面观察,请尝试:
(?<!https:\/\/)(http:\/\/)?(projects\.myurl\.com\.lol)((\/[^\/\n]+)+)?
其中(?<!https:\/\/)
是https://
的负面后瞻,因此所有匹配但前面都有https://
的片段都不会匹配。
如果您还希望匹配((\/[^\/\n]+)+)?
部分,则最后一部分/.../...
是可选的。如果您的语言不支持正面观察,您可以使用:
(\s|^)(http:\/\/|)?(projects\.myurl\.com\.lol)
其中(\s|^)
代表whitspace(如果url由某些文本继续)或行的开头(如果url在单独的字符串中或在字符串的开头)。
您也可以在此处添加可选部分以捕获/.../...
部分。
您的正则表达式失败,因为,因为您可以check here,也可以匹配:
*
使用(...)*
量词,这意味着零次或多次,所以一切都是可选的,它也匹配字母之间的点等,没有{ {1}}:*
,因为https://projects.myurl.com.lol
之后的部分有效,因此它只匹配此部分。这里的情况是确保正则表达式仅在http://出现时才匹配,或者url不会以任何单词开头,