使用正则表达式如何删除某个字符是否在最后?

时间:2012-04-23 16:23:09

标签: regex iis-7.5 rewrite rule

我正在尝试在IIS7中编写URL重写器规则。 我目前的注册表达是^(policy|pricing|contact|gallery)/(.*) 我的重写规则是:/{R:1}.aspx?cat={R:2}

policy /(在这种情况下保持斜线,工作)

gallery / soccer(没有提供斜杠所以这个工作)

gallery / soccer /(需要删除最后一个斜杠)

gallery / soccer / girls /(需要删除最后一个斜线)

任何想法都会很棒,我知道如何用.Net这样的语言来解决这个问题,但我需要严格按照IIS中的正则表达式规则进行操作。

3 个答案:

答案 0 :(得分:2)

这可能有效

^(policy|pricing|contact|gallery)/([^/]*(?:/[^/]+)*)

答案 1 :(得分:1)

我认为以下内容应该有效:

^(policy|pricing|contact|gallery)/(.*?)/?$

最后的/?表示“匹配/一次或零次”,换句话说,它是可选的。只是将其添加到最后将无效,因为/仍会使用.*,因此我们需要将.*更改为.*?,以便它不再贪心。

$锚是必要的,这样匹配不会太早结束。

请注意,尾随/仍然是匹配的一部分,但它不会是第二个捕获组的一部分,因此您的重写规则应该正常工作。

看到它正常工作:http://www.rubular.com/r/s8IqIlaqoz

答案 2 :(得分:0)

我认为如果你明确地把它放在最后(我没有转义/,因为它看起来你没有这样做),你将在重写时有效地删除它,不包括基。

^(policy|pricing|contact|gallery)/(.*)/?$

通过添加$,我们确保只删除最后的正斜杠 - 在它们之间仍然可以有 n 正斜杠。