繁体   English   中英

正则表达式的奇怪行为(?:)

[英]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}&amp;sub1={R:2}&amp;sub2={R:3}&amp;sub3={R:4}&amp;sub4={R:5}" />
        </rule>

匹配行为不应基于此差异改变。 问题是:

  • web.config文件中的其他内容。
  • 正则表达式引擎或web.config中的错误。

经过数小时的奋斗,我终于找到了问题所在。

匹配是从零开始的,类似于{R:0} {R:1},...当使用?:时 ,由于匹配数减少了1,因此例如在添加之前有效的{R:1} 变成无效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM