【发布时间】:2020-09-16 07:25:30
【问题描述】:
我正在尝试匹配一些这样构建的网址:
https://tenantName-dev.somedomain.com/somefile.js
https://tenantName-qa.somedomain.com/somefile.js
https://tenantName.somedomain.com/somefile.js
注意最后一个没有“环境”的,因为它是产品。
到目前为止我的 C# 正则表达式:
https://(?<tenantName>.+)-(?<environment>[^.]*).(?<rootDomain>[^/]+)/somefile.js
这通常有效,但与最后一个不匹配,因为它总是需要一个“-”。 如果我只是让那个破折号成为可选的,那么它会匹配像 'https://tenant-.somedomain...' 这样不好的东西。
我尝试查看前瞻组和非捕获组来表达这样一个事实,即只有在后面有租户但没有成功时我才想要一个“-”。
【问题讨论】:
-
https:\/\/(?<tenantName>.+)(-(?<environment>[^.]*))?\.(?<rootDomain>[^\/]+)\/somefile.js怎么样? regex101.com/r/VmDlFf/1 -
试试
https://(?<tenantName>\w+)[-.](?<environment>[^/]*)\.(?<rootDomain>[^/.]+)/somefile\.js -
太贪心了,所以你依赖于前面的
-和最后的.js的位置结构,但对于只有1 个点的域不要acnt,但是是吗?你靠贪心排队灯芯是不行的。到目前为止,所有的 sugestunz 都不好 -
user 和 @wiktor-stribiżew 您的两个建议都允许我匹配以下字符串,这是不可接受的 tenantName-.somedomain.com/somefile.js
标签: .net regex regex-group