在下面的相对url中我想得到可选的origin参数但是我只需要原点本身(在以下url中 test 而不是 with-test-origin )
/somequery/with-test-origin/param/param/more
当我使用这个正则表达式时,url会匹配:
([^/]+)/(?:(?:with-)([^/]*)(-origin)/)?([^/]*/)?([^/]*/)?more
但不是在我使用它时:
([^/]+)/(?:(?:with-)([^/]*)(?:-origin)/)?([^/]*/)?([^/]*/)?more
有什么问题?当我不想抓住( - 原创)组时,为什么它不起作用?
修改
我在一个应用程序中测试它运行正常。我也在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>
答案 0 :(得分:0)
匹配行为不应根据此差异进行更改。问题是:
答案 1 :(得分:0)
经过几个小时的挣扎,我终于找到了问题。
匹配是基于零的,就像{R:0} {R:1},... 当使用?:时,匹配数减少了1,例如在添加?:之前有效的{R:1}变为无效。