如何在 D 中构建静态正则表达式数组?

How can I construct an array of static regexes in D?

我有几个正则表达式需要连续应用。例如:

import std.regex;

auto ctrex1 = ctRegex!(`def\s\n`);
auto ctrex2 = ctRegex!(`func\(`);

我想将它们包装在一个数组中并将其用作函数参数。

StaticRegex!char[] staticRegexes = [ctrex1, ctrex2];

但是它不起作用,编译器抛出

Error: static variable ctrex1 cannot be read at compile time

我天真的理解是,编译器读取并编译ctrex1ctrex2后,在下面为这些对象编译数组应该没有问题。假设它只是从上到下读取语句。但是看来我的理解是错误的。在这种情况下,编译器如何工作以及如何构造静态正则表达式数组?

您不能拥有编译时正则表达式对象的数组,因为数组的值都必须具有相同的类型,但编译时正则表达式将表达式字符串作为其类型的一部分。

您可以改为使用编译时正则表达式对象的元组,或者添加一个间接级别并将每个对象包装到统一委托中,然后调用编译时正则表达式对象的匹配器。