[英]strange behavior of regex (?:)
在以下相对URL中,我想获取可选的origin参数,但我只需要Origin本身(将在以下url中进行测试 ,而不是with-test-origin )
/somequery/with-test-origin/param/param/more
使用此正则表达式时,URL匹配:
([^/]+)/(?:(?:with-)([^/]*)(-origin)/)?([^/]*/)?([^/]*/)?more
但是当我使用这个时:
([^/]+)/(?:(?:with-)([^/]*)(?:-origin)/)?([^/]*/)?([^/]*/)?more
问题是什么? 为什么当我不想接(-origin)组时它不起作用?
编辑:
我在运行良好的应用程序中对其进行了测试。 我也在web.config中尝试了这个:
([^/]+)/(?:(with-)([^/]*)(?:-origin)/)?([^/]*/)?([^/]*/)?more
在web.config中(将(?:从(?:with-)中删除,然后放回(?:-origin)中),它也可以在web.config中使用。web.config文件中的组数量是否有限制?我不想追的团体?
这是我在web.config文件中使用它的方式:
<rule name="tst" enabled="true" stopProcessing="true">
<match url="([^/]+)/(?:(?:with-)([^/]*)(?:-origin)/)?([^/]*/)?([^/]*/)?more" />
<action type="Rewrite" url="moreinfo.aspx?cat={R:1}&sub1={R:2}&sub2={R:3}&sub3={R:4}&sub4={R:5}" />
</rule>
匹配行为不应基于此差异而改变。 问题是:
经过数小时的奋斗,我终于找到了问题所在。
匹配是从零开始的,类似于{R:0} {R:1},...当使用?:时 ,由于匹配数减少了1,因此例如在添加?之前有效的{R:1} :变成无效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.