正则表达式与NancyFx路由

时间:2014-10-16 11:13:20

标签: regex routing nancy

我正在尝试为类别页面创建通用路由

我目前用于评估的正则表达式,

\/[\w\/\-\%]+-c(\d+)(?:\/(\d{1,2}))?$

控制器代码,

Get[@"\/[\w\/\-\%]+-c(?<id>\d+)(?:\/(?<page>\d{1,2}))?$", true] = async (x, ct) =>
{
  ...
}

我正在尝试使用RegExr工具,它似乎正在传递正则表达式的所有可能的排列和组合,

i.e /anytgc123423/test/c123323/niec454stest/mystery-123-4534-thriller-suspense-c79/11

Result:
Group 1: 79 
Group 2: 11

相同的正则表达式无法使用NancyFx Get函数解析示例中建议的url。

如果有人可以投光,那将会很有帮助。

提前致谢。

1 个答案:

答案 0 :(得分:2)

https://github.com/NancyFx/Nancy/wiki/Defining-routes

使用()获取正则表达式的路由。

https://github.com/NancyFx/Nancy/blob/master/src/Nancy/Routing/Trie/TrieNodeFactory.cs#L38

        if (start == '(' && end == ')')
        {
            return new RegExNode(parent, segment, this);
        }

所以你的路线不会工作,除非你用括号包裹它。

在您的情况下,您希望使用使用^()$

完成的贪婪正则表达式
        if (segment.StartsWith("^(") && (segment.EndsWith(")") || segment.EndsWith(")$")))
        {
            return new GreedyRegExCaptureNode(parent, segment, this);
        }