我正在尝试编写与{QUERY_STRING}条件类型匹配的正则表达式。
示例数据:
slug=something1 &slug=something2 &slug=something3 &slug=something4 &id=5645
注意:我已添加空格以便于阅读。
到目前为止正则表达式:
^(slug=(\w+)|&slug=(\w+)|&id=(\d+))+
有了这个我能够访问5个回调:
我想要实现的目标:
另一项要求:
我总是将 id 作为最后一个变量传递,并且我希望它始终处于第5位,无论传递多少个slugs(到最多4个,最少1个。这甚至可能吗?
谢谢!
答案 0 :(得分:1)
尝试
(?:slug=([a-zA-Z0-9]+)&)?(?:slug=([a-zA-Z0-9]+)&)?(?:slug=([a-zA-Z0-9]+)&)?(?:slug=([a-zA-Z0-9]+))?id=(\d+)+
重复这种模式有点难看,但我还不够聪明,无法找到另一种表达方式。
?:in
(?:slug=([a-zA-Z0-9]+)&)
告诉处理者不要捕获匹配。
这也实现了您的要求:ID总是在C:5。
我在我的IIS 7.5中尝试了这个,它可以工作,除了,如果只有一个slug - 在这种情况下,这个slug被捕获到C:3中。我不知道为什么。其他正则表达式测试人员(如http://regex101.com/#pcre)正确捕获。
我会考虑一下,但如果这需要太长时间,或者我没有提出解决方案,您可以随时添加多个重写规则(在这种情况下,为一个 slug)。
这就是它在IIS中的样子: