正则表达式作为关联数组键?

时间:2016-12-25 05:01:31

标签: regex d associative-array

我在D中处理代码中一个非常依赖性能的部分。为此,我希望有一个关联数组将我的数据映射到Regex,以便我以后可以使用它。 / p>

当我尝试这样做时,它会给我错误index is not a type or expression。如何将此正则表达式用作我的数组键?

编辑:对于代码,这是我在课堂上尝试定义的内容:

View[Regex] m_routes;

我希望这样我可以添加如下路线:

void add(string route, View view)
{
    auto regex = regex(route.key, [ 'g', 'i' ]);

    if (regex in m_routes)
        throw new Exception(format(`Route with path, "%s", is already assigned!`, route));

    m_routes[regex] = view;
}

然后,这将允许我检查路由的正则表达式,而不必重建每个路由,如此方法所示:

View check(string resource)
{
    foreach (route; m_routes.byKeyValue())
    {
        auto match = matchAll(resource, route.key);

        // If this regex is a match
        // return the view
        if (!match.empty)
        {
            return route.value;
        }
    }

    return null;
}

任何帮助将不胜感激,谢谢!

1 个答案:

答案 0 :(得分:5)

似乎std.regex.Regex是一个带有类型参数的别名:

(来自std.regex.package,版本2.071.0中的第289行)

public alias Regex(Char) = std.regex.internal.ir.Regex!(Char);

换句话说,您需要为正则表达式指定char类型。对于string,该char

View[Regex!char] m_routes;