【发布时间】:2015-03-07 22:27:49
【问题描述】:
在下面的相对网址中,我想获取可选的原点参数,但我只需要原点本身(以下网址中的 test 不是 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>
【问题讨论】:
-
见regex101.com/r/xW8kZ0/2它正在工作。
-
@AvinashRaj 我在 web.config 文件中使用它来重写 url,它在那里不起作用
-
错误信息是什么?它抛出异常,说没有匹配?
-
我认为您需要将所有捕获组转换为非捕获组,而不是持有测试的组regex101.com/r/xW8kZ0/3
-
@George 当我省略 ?: from (?:-origin) 时它会重写 url,否则它会显示常见的错误页面,该页面总是在 url 不匹配时显示
标签: c# regex url-rewriting